临时的数组可能吗?

时间:2019-04-09 01:38:54

标签: c++

移动支持窃取临时对象的内部以避免复制。是否可以创建临时对象的原始数组?即媒介不属于此类别。

struct Employee{};

Employee{}; // this creates temporary
Employee [10]; // compiler error, expected identifier before numeric constant

2 个答案:

答案 0 :(得分:1)

是的,可以有具体化的数组prvalue。不过,您需要使用类型别名,因为案例T{}的类型说明符必须是单个标识符:

using array_t = Employee[10];
array_t{};

prvalue也可以进行数组到指针的转换,例如:

void func(Employee const* ptr);
// ...
func( array_t{} );

答案 1 :(得分:0)

延长临时生存期的唯一好方法是获取并保持对const的引用。

类似的事情可能会起作用

using Ecref = const Employee&;

Ecref a[10] = {Employee("John"), Employee("Mary"), ...};

但是,不幸的是,在C ++中,引用数组(包括常量和非常量)都被禁止。