是否可以在函数调用中初始化对象参数?
Is it possible to initialize an object parameter in a function call?
我知道有一个 shorthand 可以像这样初始化对象:
Point p = {0, 0} // x = 0, y = 0
我的问题是,是否可以使用它创建一个临时对象作为函数调用的参数,而无需先将其存储在变量中?这是一个说明性的例子,展示了我是如何尝试做到这一点的,希望它能让我更好地了解我正在尝试做的事情:
Point p = addPoints(&{1, 2}, &{3, 4}, &{5, 6});
您的解决方案无效。您不能获取 {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});
我知道有一个 shorthand 可以像这样初始化对象:
Point p = {0, 0} // x = 0, y = 0
我的问题是,是否可以使用它创建一个临时对象作为函数调用的参数,而无需先将其存储在变量中?这是一个说明性的例子,展示了我是如何尝试做到这一点的,希望它能让我更好地了解我正在尝试做的事情:
Point p = addPoints(&{1, 2}, &{3, 4}, &{5, 6});
您的解决方案无效。您不能获取 {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});