我在问
Type t{...};
和
Type t({...});
和
Type t = {...};
相同吗?如果一个工作,另一个也应该使用相同的结果?
如果没有explicit
修饰符,它们是否相同?
答案 0 :(得分:7)
不,这三种形式都是截然不同的,在不同情况下可能是独立的,也可能是形式不正确的。
Here's an example第一个表单编译,但第二个和第三个不编译:
class Type {
public:
explicit Type(int, int) {}
};
int main()
{
Type t1{1, 2}; // Ok
Type t2({1, 2}); // error
Type t3 = {1, 2}; // error
}
Here's the example第二种形式编译,但第一种和第三种形式不编译:
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
}
Here's an example,由@T.C.提供,其中第三种形式编译,但第一种和第二种形式不编译:
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
}