【发布时间】:2013-06-29 23:20:41
【问题描述】:
假设我有这门课:
struct A
{
A(int, int, int) {}
};
我这样初始化它:
A{ a(), b(), c() };
函数a()、b() 和c() 都返回int。应该在b() 和b() 之前调用a() 在c() 之前调用吗?
我对标准中的以下段落感到困惑(8.5.4 [dcl.init.list] p4):
在花括号初始化列表的初始化列表中,初始化子句,包括任何由 pack 产生的子句 扩展(14.5.3),按照它们出现的顺序进行评估。也就是说,每个值计算和 与给定初始化子句相关的副作用在每个值计算和边之前排序 与在初始化器列表的逗号分隔列表中跟随它的任何初始化器子句相关联的效果。 [注意:无论初始化的语义如何,这种评估顺序都成立;例如,它适用 当初始化列表的元素被解释为构造函数调用的参数时,即使 通常对调用的参数没有顺序限制。 ——尾注]
根据引用,函数会按它们出现的顺序被调用,但是当我用我的编译器(g++-4.8.1)测试它时,它不成立。我是不是误会了什么?
【问题讨论】:
-
谢谢,在构造函数中使用初始化列表似乎是解决方法。