c++ - 保证复制省略纸在构造函数中使用 void

标签 c++ c++17

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”,这个人也错过了 && 部分,并且忘记了复制构造函数参数中的 const 也就不足为奇了(也不是绝对必要的) .

基本上,那里有很多错误;有人匆忙写了。

关于c++ - 保证复制省略纸在构造函数中使用 void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38416061/

相关文章:

c++ - constexpr 结构成员初始化

c++ - 如何在编译时找出 integer_sequence 是否包含给定的数字?

c++ - 带有一个选项卡的 QTabBar 太宽

c++ - 创建从可变参数模板包派生的类型元组

c++ - mysql_real_connect 给出段错误 - C++

c++ - count 参数是否应该直接在可变参数函数中的省略号 (...) 之前声明?

c++ - std::optional 的普通默认构造函数

c++ - 定义不删除指针的最干净的方法是什么?

c++ - QT 程序包含带有 if-test-then block 的 bash 脚本以及内部问题错误中转义的必要引号

c++ - 关闭 boost asio ssl 套接字时需要调用 ssl::stream::shutdown 吗?