我想知道,标准类型的赋值运算符不是左值引用限定的原因吗?他们都不是。
正因为如此,我们可以这样写:
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/