Sto*_*ica 8 c++ language-lawyer
考虑这个简单的类型:
struct A {
A(int, int, int) {}
A(std::vector<int>) {}
};
///
A a({1,2,3});
Run Code Online (Sandbox Code Playgroud)
上面的代码段构成了一个不正确的程序,因为重载决策失败,因为{1, 2, 3}可以用来初始化临时A,因此复制c'tor也可用于初始化a.
我最初假设标记第一个c'tor explicit A(int, int, int)可用于解决问题.而且Clang同意了.另一方面,海湾合作委员会仍然不接受它,说明两个可行的候选人的同样理由.
更糟糕的是,另一个观察结果使这更令人困惑.如果要使用列表初始化,即A a{{1,2,3}};,然后突然Clang 和 GCC都接受原始类定义不变的代码(没有任何东西explicit).
在哪种编译器符合的情况下A a({1,2,3});?
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |