7

谁能解释为什么非单参数构造函数标记为显式编译?据我了解,这在这里绝对是无用的关键字,那么为什么编译时不会出错?

class X
{
public:
    explicit X(int a, int b) { /* ... */}
};
4

2 回答 2

10

在 C++03 中,在这种特殊情况下,将两个参数的构造函数标记为 是没有意义的explicit。但这在这里可能有意义:

explicit X(int i, int j=42);

因此,标记两个参数的构造函数explicit不一定是错误。

在 C++11 中,显式的这种使用会阻止你这样做:

X x = {1,2};
于 2013-11-27T13:43:44.653 回答
8

不完全正确。

在 C++11 中,可以使用大括号初始化隐式转换具有多个参数的构造函数。

于 2013-11-27T13:45:43.673 回答