【问题标题】:ref-qualifiers for the assignment operator of standard library types标准库类型的赋值运算符的引用限定符
【发布时间】:2019-03-31 03:49:58
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你的建议是proposed in 2009,最终在当年的法兰克福因"concerns about backwards compatibility"而被拒绝。

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

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

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

    【讨论】:

    • 呸,就贬低它,等 6 年,然后杀了它。 99/100 次使用将是错误。
    • 我明白了。但它会破坏什么?除了一些小众案例之外还有什么?
    • @MariusBancila 不,差不多,亚当是对的。但还是。在我看来,几年后“我们认为这不值得随之而来的意外灾难”情况的完美候选人。我猜,不要修复没有完全损坏的东西。
    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2012-09-27
    • 2017-10-07
    • 2011-05-29
    • 2011-12-12
    • 2014-05-24
    相关资源
    最近更新 更多