保证复制省略纸在构造函数中使用 void
Guaranteed copy elision paper's use of void in a constructor
在paper P0135R0中有一个例子:
struct NonMoveable {
NonMoveable(int);
NonMoveable(NonMoveable&) = delete;
void NonMoveable(NonMoveable&) = delete;
std::array<int, 1024> arr;
};
NonMoveable make() {
return NonMoveable(42); // ok, directly constructs returned object
}
auto nm = make(); // ok, directly constructs 'nm'
这让我很困惑:
void NonMoveable(NonMoveable&) = delete;
这是什么?构造函数怎么可以为空?
更新。有人链接 probable answer - 不!这个问题完全不同。
"void" 就是我们所说的 "typo"。意图很可能是删除移动赋值运算符(尽管不是绝对必要的,因为删除复制构造函数就可以做到这一点)。考虑到这个人写了 "void",所以这个人也错过了 &&
部分,并且忘记了复制构造函数参数中的 const
也就不足为奇了(也不是绝对必要的)。
基本上,那里有很多错误;有人匆忙写了。
在paper P0135R0中有一个例子:
struct NonMoveable {
NonMoveable(int);
NonMoveable(NonMoveable&) = delete;
void NonMoveable(NonMoveable&) = delete;
std::array<int, 1024> arr;
};
NonMoveable make() {
return NonMoveable(42); // ok, directly constructs returned object
}
auto nm = make(); // ok, directly constructs 'nm'
这让我很困惑:
void NonMoveable(NonMoveable&) = delete;
这是什么?构造函数怎么可以为空?
更新。有人链接 probable answer - 不!这个问题完全不同。
"void" 就是我们所说的 "typo"。意图很可能是删除移动赋值运算符(尽管不是绝对必要的,因为删除复制构造函数就可以做到这一点)。考虑到这个人写了 "void",所以这个人也错过了 &&
部分,并且忘记了复制构造函数参数中的 const
也就不足为奇了(也不是绝对必要的)。
基本上,那里有很多错误;有人匆忙写了。