C++11 / 生成的构造函数

2024-04-16

我一直在从事由其他人(已离开公司)发起的 C++ 项目。他写了一段代码,看起来运行得很好,但我无法理解。

下面是代码的简化版本:

有两类:

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();
    }
};

主要是:

main函数中有如下调用:

char * pMyFileName = agrv[1] ;
Algo_t MyAlgo(ifstream(pMyFileName));

首先,我很惊讶代码编译时没有任何错误,因为没有构造函数Algo_t taking ifstream作为参数。 我更惊讶地发现这段代码运行得非常好。

构造函数是由编译器生成的还是 C++11 引入的一些新功能(带有右值...)?


在 C++ 中,最多允许一次用户定义的转换。你不能直接构造一个Algo_t from a ifstream但你可以构造一个Matrix_t with a ifstream。所以在

Algo_t MyAlgo(ifstream(pMyFileName));

编译器构造一个临时的Matrix_t(您的一个用户定义的转换)然后您使用该临时来构造MyAlgo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 / 生成的构造函数 的相关文章

随机推荐