gpt4 book ai didi

大括号或等于初始化程序和初始化列表之间的 C++ 评估顺序?

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

我有这个结构的地方,

struct
AAA
{
AAA() : bbb(2)
{
// ccc ???
}

int bbb = 1;
int ccc = bbb;
};

AFAIK ,如果有一个初始化列表 :bbb(2),表达式 bbb = 1 将被忽略。然后,我不清楚 ccc 最终会变成什么。

initialization-listbrace-or-equal initializer 中的哪一个会首先被评估?它们之间的规则是什么?

最佳答案

C++11 draft §12.6.2.9 说;

If a given non-static data member has both a brace-or-equal-initializer and a mem-initializer, the initialization specified by the mem-initializer is performed, and the non-static data member’s brace-or-equal-initializer is ignored.

[ Example: Given

struct A {
int i = /∗ some integer expression with side effects ∗/ ;
A(int arg) : i(arg) { }
// ...
};

the A(int) constructor will simply initialize i to the value of arg, and the side effects in i’s brace-or- equal-initializer will not take place. — end example ]

由于添加了这条规则,初始化是按照声明顺序(§12.6.2.10)完成的,bbbccc 的值都将是 2。

关于大括号或等于初始化程序和初始化列表之间的 C++ 评估顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20303525/

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