标准库类型的赋值运算符的 ref 限定符

Mar*_*ila 4 c++ stl std assignment-operator 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 };
Run Code Online (Sandbox Code Playgroud)

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

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

Lig*_*ica 5

你的建议是在2009年提出的,最终在当年的法兰克福因“对向后兼容性的担忧”而被拒绝。

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

无论如何,现有的禁止分配给内置类型的右值的实际价值是有限的,因此潜在破坏现有代码的成本几乎肯定被认为是“不值得的”

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