说我有这门课:
struct A
{
A(int, int, int) {}
};
我像这样初始化它:
A{ a(), b(), c() };
函数在哪里a()
,b()
全部c()
返回int
。应该a()
叫 beforeb()
和b()
beforec()
吗?
我对标准(8.5.4 [dcl.init.list] p4)中的以下段落感到困惑:
在花括号初始化列表的初始化列表中,初始化子句,包括由包扩展 (14.5.3) 产生的任何初始化子句,按照它们出现的顺序进行评估。也就是说,与给定初始化子句相关联的每个值计算和副作用在初始化器列表的逗号分隔列表中与任何初始化子句相关联的每个值计算和副作用之前进行排序。[注意:无论初始化的语义如何,这种评估顺序都成立;例如,它适用于初始化器列表的元素被解释为构造函数调用的参数时,即使调用的参数通常没有顺序约束。——尾注]
根据引用,函数将按它们出现的顺序被调用,但是当我用我的编译器(g++-4.8.1)测试它时,它不成立。我误解了什么吗?