Передача конструктора в функцию

Я использую вектор STL, который является вектором параметров.

std::vector<Parameter> foo;

Я пытался найти способ добавить объекты Parameter в вектор, не делая этого:

Parameter a;
foo.push_back(a);

Я наткнулся на реализацию, которая сделала это:

foo.push_back(Parameter()); //Using the Parameter constructor

Я думал, что когда я создал объект, конструктор называется не наоборот. Почему я могу передать конструктор функции?

5

Решение

foo.push_back(Parameter()); передает временно построенный объект Parameter push_back а не конструктор, т.е. Parameter() это вызов для создания объекта типа Parameter в стеке и передать его push_back функция vectorгде он перемещается / копируется. Таким образом, передается не сам конструктор, а только сконструированный объект.

Это просто сокращенный способ написания Parameter a; foo.push_back(a); когда кто-то уверен, что a нигде не используется; вместо объявления фиктивной временной переменной создается и передается анонимная временная переменная.

Это может быть полезно, если вы хотите узнать больше о временных:

http://www.informit.com/guides/content.aspx?g=cplusplus&SEQNUM = 198

http://msdn.microsoft.com/en-us/library/a8kfxa78%28v=vs.80%29.aspx

6

Другие решения

Эта строка создаст временный экземпляр Parameter и скопировать его в Foo, Предполагая, что это код до C ++ 11. Новый std::vector<T>::push_back имеет перегрузку для rvalues, в этом случае не будет копий.

3

когда ты звонишь Parameter() временный объект создается и передается foo.push_back() функция. Ранее вы объявили объект с именем Parameter a; и передал это так foo.push_back(a), Делая так, вы можете использовать объект с именем a вниз по линии вашей программы.

1

Вы не передаете конструктор, а вместо этого передаете временный объект. Когда вы делаете Paramater() из-за фарантеза он создает объект. Например, вызов функции getInput(),

0

Другой момент, который мы здесь упускаем, заключается в том, что для передачи функции в качестве параметра вы вообще не используете скобки. Вот пример передачи функции в качестве параметра:

#include <algorithm>
#include <vector>
#include <iostream>

// initialise sum and summing function
int sum = 0;
void sum_numbers( const int& number );

// Create a test for our sum function
int main(int argc, const char * argv[])
{
// create some numbers
std::vector<int> numbers;
numbers.push_back( 34 );
numbers.push_back( 73 );
numbers.push_back( 14 );

// passing "sum_numbers" function as a parameter
std::for_each( numbers.begin(), numbers.end(), sum_numbers );

// check that our sum function worked
std::cout << "The sum of numbers is: " << sum << std::endl;

return 0;
}

// add the current number to the sum
void sum_numbers( const int& number )
{
sum += number;
}
0
По вопросам рекламы [email protected]