小编Arq*_*ier的帖子

为什么在特殊成员函数中将 r 值绑定到 const 左值引用是非法的?

对于函数参数,可以将 r 值绑定到 l 值常量引用。但是,这似乎不适用于特殊成员函数,如 C++11 和 C++14 中的复制构造函数和复制赋值运算符。这有什么动机吗?

使用 C++17 时,可以从 r 值复制构造,但不能复制赋值。是否有动机为什么这里只更改了复制构造函数的行为?

所有这些都在以下示例中进行了演示:

struct B {
 B() = default;
 B(B const&) = default;
 B(B&&) = delete;
 B& operator=(B const&) = default;
 B& operator=(B&&) = delete;
};

void bar(B const &) {}

int main() {
    bar(B{}); // does work
    B(B{}); // only works in C++17

    B b{};
    b = B{}; // doesn't work
}
Run Code Online (Sandbox Code Playgroud)

c++ rvalue language-lawyer c++11 c++17

8
推荐指数
1
解决办法
225
查看次数

标签 统计

c++ ×1

c++11 ×1

c++17 ×1

language-lawyer ×1

rvalue ×1