菜鸟笔记
提升您的技术认知

explicit-ag真人游戏

在c 中,如果类的某个构造函数只有一个参数,那么编译器在编译的时候,就会有一个默认的隐式转换操作:将该构造函数参数的类型转换为该类的类型。

举例:

#include 

class test { public: int m_value; public: test(int value) { this->m_value = value; } }; int main() { test test = 10; std::cout << test.m_value << std::endl; return 0; }

如上的test test = 10操作是正确的,因为默认的隐式转换将构造函数参数的类型转换为当前类的类型,这样该构造函数就像拷贝构造函数一样,让test test = 10的操作是可行的。

如果改成下面的操作,便会编译失败

#include 
class test
{
public:
    int m_value;
public:
    explicit test(int value)
    {
        this->m_value = value;
    }
};
int main()
{
    test test = 10;
    std::cout << test.m_value << std::endl;
    return 0;
}

explicit:明确的(显式的),表示该构造函数是显式的,不能进行默认的隐式转换

网站地图