移动支持窃取临时对象的内部以避免复制。是否可以创建临时对象的原始数组?即媒介不属于此类别。
struct Employee{};
Employee{}; // this creates temporary
Employee [10]; // compiler error, expected identifier before numeric constant
答案 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 ++中,引用数组(包括常量和非常量)都被禁止。