gpt4 book ai didi

c++ - 各种初始化和构造之间的关系?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:59 27 4
gpt4 key购买 nike

我问的是

Type t{...};

Type t({...});

Type t = {...};

是等价的吗?如果一个有效,另一个也应该得到相同的结果?

如果没有explicit修饰符,它们是等价的吗?

最佳答案

不,这三种形式都是不同的,并且在不同情况下可能独立地是良构或病构的。

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
}

关于c++ - 各种初始化和构造之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42928912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com