gpt4 book ai didi

c++ - 如何通过直接值初始化来避免最烦人的解析?

转载 作者:太空狗 更新时间:2023-10-29 20:51:07 26 4
gpt4 key购买 nike

阅读后 Most vexing parse ,我理解下面的代码也是有歧义的

T x();

一方面,它可以解释为返回T对象的函数声明。另一方面,也可以解释为变量定义,对象xvalue-initialized .

我知道我可以像下面的代码一样使用统一初始化来避免冲突:

T x{};

我也理解如果 T 是一个(非 POD 在 C++11 之前)类并且下面的默认初始化实际上等于值初始化

T x;

同时,如果不需要直接初始化,我们可以使用copy initialization :

T x = T();

但是,我认为这三种解决方案中的任何一种都有其局限性。我知道如果有一些争论,我也可以使用额外的一对括号:

T x((arg));

我想采用这种策略,但是下面的代码不起作用

T x(());

是否有一些更好的直接值初始化解决方案?

最佳答案

使用复制初始化并依赖 C++17 对复制省略的保证。

例如:

struct Foo
{
Foo() = default;
Foo(Foo const&) = delete;
};

int main()
{
auto f = Foo();
}

https://godbolt.org/g/9tbkjZ

关于c++ - 如何通过直接值初始化来避免最烦人的解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51707710/

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