我想知道,标准类型的赋值运算符没有左值引用限定是否有原因?他们都不是。
因此,我们可以这样写:
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)而没有人写提案?我不认为人们会写这样的代码,但库不应该被设计成甚至不允许这样做吗?
你的建议是2009年提出 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2819.html,并最终于当年在法兰克福被拒绝“对向后兼容性的担忧” http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2920.html.
这将是一个突破性的改变,我们不喜欢这样。
无论如何,现有的禁止分配给内置类型的右值的实际价值有限,因此潜在破坏现有代码的成本是几乎肯定被认为“不值得” https://stackoverflow.com/q/28598468/560648.
如果我们有一个干净的石板,图书馆会以这种方式设计吗?也许。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)