3

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

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

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)而没有人为它写提案?我认为人们不会编写这样的代码,但库不应该被设计成不允许它吗?

4

1 回答 1

4

您的建议是在 2009年提出的,并最终在当年在法兰克福被拒绝,原因是“担心向后兼容性”

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

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

如果我们有一张白纸,图书馆会以这种方式设计吗?也许。

于 2018-10-26T11:32:43.490 回答