axe*_*axe 7 c++ constructor explicit-constructor
任何人都可以解释为什么非单参数构造函数标记为显式编译?据我所知,这里绝对是无用的关键字,为什么这个编译没有错误?
class X
{
public:
explicit X(int a, int b) { /* ... */}
};
Run Code Online (Sandbox Code Playgroud)
jua*_*nza 10
在C++ 03中,在这种特殊情况下,标记两个参数构造函数是没有意义的explicit.但这里有意义:
explicit X(int i, int j=42);
Run Code Online (Sandbox Code Playgroud)
因此,标记两个参数构造函数explicit不一定是错误.
在C++ 11中,使用explicit会阻止你这样做:
X x = {1,2};
Run Code Online (Sandbox Code Playgroud)