【发布时间】:2020-12-03 00:31:24
【问题描述】:
对于函数参数,可以将一个右值绑定到一个左值常量引用。 但是,这似乎不适用于特殊的成员函数,例如 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
}
【问题讨论】:
标签: c++ c++11 c++17 language-lawyer rvalue