Я работаю над проектом C++, запущенным кем-то еще (кто покинул компанию). Он написал фрагмент кода, который, кажется, работает очень хорошо, но я не могу этого понять.C++ 11/Генерируемый конструктор
Вот ниже упрощенной версии кода:
Есть два класса:
class Algo_t {
protected :
Matrix_t m_Matrix ;
public:
Algo_t(Matrix_t && Matrix) {
DoSomething();
}
};
class Matrix_t {
protected :
std::ifstream & m_iftsream ;
public:
Matrix_t(std::ifstream && ifstream) {
DoSomething();
}
};
В основном:
Существует следующий вызов в главной функции:
char * pMyFileName = agrv[1] ;
Algo_t MyAlgo(ifstream(pMyFileName));
Сначала я был очень удивлен, что код, составленный без ошибок, был se нет конструктора Algo_t
, принимающего ifstream
в качестве параметра. Я был более удивлен, заметив, что этот код работает очень хорошо.
Являются ли конструктором, сгенерированным компилятором, или есть какая-то новая функция, введенная C++ 11 (с rvalue ...)?
Может быть, класс 'Matrix_t' имеет' оператор ifstream'-литья, или конструктор, который принимает 'ifstream'? О, черт возьми, это так ... Это объясняет это ... –
Ваша упрощенная версия не скомпилируется даже после исправления некоторых очевидных ошибок. –
Это (почти) такое же поведение, как при построении структуры, принимающей 'std :: string' с помощью' const char [] ', например. 'std :: stringstream (« Hello World! »)' - Вам не нужно явно делать 'std :: stringstream (std :: string (« Hello World! »))'. – Holt