使构造函数具有多个参数 explicit
有任何(有用的)效果吗?
例子:
class A {
public:
explicit A( int b, int c ); // does explicit have any (useful) effect?
};
原文由 Peter G. 发布,翻译遵循 CC BY-SA 4.0 许可协议
使构造函数具有多个参数 explicit
有任何(有用的)效果吗?
例子:
class A {
public:
explicit A( int b, int c ); // does explicit have any (useful) effect?
};
原文由 Peter G. 发布,翻译遵循 CC BY-SA 4.0 许可协议
您会偶然发现它进行大括号初始化(例如在数组中)
struct A {
explicit A( int b, int c ) {}
};
struct B {
B( int b, int c ) {}
};
int main() {
B b[] = {{1,2}, {3,5}}; // OK
A a1[] = {A{1,2}, A{3,4}}; // OK
A a2[] = {{1,2}, {3,4}}; // Error
return 0;
}
原文由 StoryTeller - Unslander Monica 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
直到 C++11,是的,没有理由在多参数构造函数上使用
explicit
。由于初始化列表,这在 C++11 中发生了变化。基本上,带有初始化列表的复制初始化(但不是直接初始化)要求构造函数不被标记为
explicit
。例子: