是否可以在函数调用中初始化对象参数?

时间:2015-02-12 18:56:36

标签: c++ object parameters

我知道这是一个初始化对象的简写:

Point p = {0, 0} // x = 0, y = 0

我的问题是,是否可以使用它来创建一个ad-hoc对象作为函数调用的参数,而不首先将其存储在变量中?这是一个说明性的例子,展示了我如何尝试这样做,希望能够更好地了解我尝试做的事情:

Point p = addPoints(&{1, 2}, &{3, 4}, &{5, 6});

1 个答案:

答案 0 :(得分:5)

您的解决方案无效。你不能取一个临时的地址,{1, 2}会生成(如果它知道首先要生成什么类型​​)。

您使用的语法表明addPoints的参数类型为Point*(或者可能是const Point *) - 指向Point的指针。如果是这种情况,可以假设该函数实际上将地址存储在某个地方,所以如果临时传递地址将是一个坏主意。

如果您知道该功能实际上并不存储该地址,并且它在您的控制之下,您可以将其更改为采用const Point &(或仅仅是Point)参数。然后,您可以正常使用统一初始化语法(假设C ++ 11):

Point addPoints(const Point &p1, const Point &p2, const Point &p3);

Point p = addPoints({1, 2}, {3, 4}, {5, 6});