标准 C++11 是否保证在开始执行该函数之前已创建所有 3 个临时对象?
即使临时对象传递为:
- object
- 右值引用
- 仅传递临时对象的成员
http://ideone.com/EV0hSP http://ideone.com/EV0hSP
#include <iostream>
using namespace std;
struct T {
T() { std::cout << "T created \n"; }
int val = 0;
~T() { std::cout << "T destroyed \n"; }
};
void function(T t_obj, T &&t, int &&val) {
std::cout << "func-start \n";
std::cout << t_obj.val << ", " << t.val << ", " << val << std::endl;
std::cout << "func-end \n";
}
int main() {
function(T(), T(), T().val);
return 0;
}
Output:
T created
T created
T created
func-start
0, 0, 0
func-end
T destroyed
T destroyed
T destroyed
工作草案,编程语言 C++ 标准 2016-07-12:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf
§ 5.2.2 函数调用
§ 5.2.2
1 函数调用是一个后缀
表达式后跟括号,其中可能为空,
构成的初始化子句的逗号分隔列表
函数的参数。
但可以是以下任意一个已创建 T after 功能启动?
或者有什么方法可以将参数作为 g/r/l/x/pr-value 传递,以便函数在创建临时对象之前启动?