use*_*020 4 c++ initialization c++11 c++14
我问是否
Type t{...};
Run Code Online (Sandbox Code Playgroud)
和
Type t({...});
Run Code Online (Sandbox Code Playgroud)
和
Type t = {...};
Run Code Online (Sandbox Code Playgroud)
相当于?如果一个工作,另一个也应该使用相同的结果?
如果没有explicit修饰语,它们是否相同?
不,这三种形式都是截然不同的,并且在不同的情况下可能是独立的或形式错误的.
class Type {
public:
explicit Type(int, int) {}
};
int main()
{
Type t1{1, 2}; // Ok
Type t2({1, 2}); // error
Type t3 = {1, 2}; // error
}
Run Code Online (Sandbox Code Playgroud)
class Pair {
public:
Pair(int, int) {}
};
class Type {
public:
Type(const Pair&) {}
};
int main()
{
Type t1{1, 2}; // error
Type t2({1, 2}); // Ok
Type t3 = {1, 2}; // error
}
Run Code Online (Sandbox Code Playgroud)
这是一个例子,由@TC提供,其中第三种形式编译,但第一种和第二种形式不编译:
struct StrangeConverter {
explicit operator double() = delete;
operator float() { return 0.0f; }
};
int main() {
StrangeConverter sc;
using Type = double;
Type t1{sc}; // error
Type t2({sc}); // error
Type t3 = {sc}; // Ok
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |