c++ - 标准库类型赋值运算符的引用限定符

标签 c++ stl assignment-operator c++-standard-library ref-qualifier

我想知道,标准类型的赋值运算符不是左值引用限定的原因吗?他们都不是。

正因为如此,我们可以这样写:

std::string{} = "42";
std::string s = "hello " + std::string{"world"} = "oops!";

std::vector<int> v = { 1,2,3 };
std::move(v) = { 4,5,6 };

如果赋值运算符是左值引用限定的,所有这些示例都不会编译。

是不是因为有很多东西要修改(但是后来就这样了 noexcept)而且没有人写提案?我不认为人们会编写这样的代码,但库的设计难道不应该不允许它这样做吗?

最佳答案

您的建议是 proposed in 2009 , 并最终于当年在法兰克福被拒绝超过"concerns about backwards compatibility" .

这将是一个突破性的改变,我们不喜欢那些。

现有的禁止分配给内置类型右值的禁令无论如何只有有限的实际值(value),因此可能破坏现有代码的成本是 almost certainly deemed to be "not worth it" .

如果我们有一个干净的石板,图书馆会以这种方式设计吗?也许吧。

关于c++ - 标准库类型赋值运算符的引用限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007802/

相关文章:

c++ - 尝试通过 OCI 例程从 Oracle 获取 blob 数据,但出现错误 : ORA-01008: not all variables bound

c++ - 如何创建一个包含自身列表的结构?

c++ - 在 C/++ 中的函数之间传递具有动态大小的二维数组

c++ - 可以利用 std::basic_string 来实现具有长度限制的字符串吗?

c++ - 使成员函数静态化会使程序无法编译。不知道为什么

VB.NET:运算符 '=' 未定义...用于相同类型的变量和对象?

c++ - 琐碎的任务

c - if 语句中的赋值语句如何充当条件?

C++ 开关盒

c++ - 如何在构造函数中轻松初始化数组?