我一直在研究由其他人(谁离开公司)启动的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));
首先,我非常惊讶的是,代码编译没有任何错误becau se没有构造函数Algo_t
以ifstream
作为参数。 我更惊讶地发现这个代码工作得很好。
构造函数是由编译器生成还是由C++ 11引入了一些新特性(使用右值...)?
也许类'Matrix_t'有一个'ifstream'铸造运营商,或需要'ifstream'的构造函数?哦,嘿,它确实...这就解释了它...... –
即使修复了一些明显的错误,您的简化版本也不会编译。 –
这与你构造一个带'const char []'的'std :: string'的结构(几乎) 'std :: stringstream(“Hello World!”)' - 你不需要显式地执行'std :: stringstream(std :: string(“Hello World!”))''。 – Holt