用作成员构造函数参数的函数的求值顺序
Order of evaluation of functions used as parameters to member constructors
让我们假设一个类:
struct S {
Obj1 o1;
Obj2 o2;
S() : o2( fn2() ), o1( fn1(), fn3() ) {}
};
在这种情况下,保证在之前对什么进行测序?o1((在o2((之前排序。fn1((和fn3((在o1((之前排序,fn2((在o2((之前顺序。问题是fns之前的顺序。据我所知,fn1((和fn3((可以按未指定的顺序进行。fn1((和fn3((是否保证在fn2((之前排序?
[intro.execution]/12 全表达式是…
(12.3(-init声明器(第11条(或mem初始化器[第15.6.2条],包括初始化器的组成表达式。。。
[interro.execution]/16与一个完整表达式相关的每个值计算和副作用都会在与下一个要评估的完整表达式相关联的每个值运算和副作用之前进行排序。
因此,o1( fn1(), fn3() )
的调用及其所有子表达式和副作用在o2( fn2() )
的调用之前进行排序。
如果你仍然不相信,[class.base.init]/7:中有一个非规范性的注释
[注意:每个mem初始值设定项执行的初始化构成一个完整表达式(4.6(。mem初始值设置项中的任何表达式都将作为执行初始化的完整表达式的一部分进行评估。--end Note]
相关文章:
- 函数调用中参数的顺序重要吗
- 优先顺序:智能指针和类析构函数
- C++成员的析构函数顺序与shared_ptr
- C++:使用方法调用析构函数的顺序是什么?
- 以 f() + g() 调用顺序的 C++ 函数
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 有没有办法保证析构函数的相对顺序?
- std::unique_ptr析构函数顺序
- 更改操作的构造函数顺序
- 函数顺序在C++中不明确
- 更改析构函数顺序
- c++如何定义其他开发人员需要调用的常量函数顺序
- 新的运算符分配函数顺序连续性和初始值
- C++构造函数和析构函数顺序
- C++构造函数顺序
- C++11构造函数&析构函数顺序
- 用私有方法重载公共方法时函数顺序的最佳实践
- 移动语义和函数顺序求值
- 静态分配的构造函数和析构函数顺序
- 虚拟继承构造函数顺序