簡體   English   中英

為什么這個std :: string C ++代碼沒有給出編譯時錯誤?

[英]Why doesn't this std::string C++ code give compile-time error?

我有以下代碼段:

#include <string>

int main(int argc, char *argv[])
{
    std::string a, b, c;
    a + b = c;
    return 0;
}

為什么這個C ++代碼不會產生編譯時錯誤? 這可能是因為std::string::operator+實現方式,但后來我的問題是:為什么這樣實現? 在什么情況下需要這種行為?

您可以分配臨時對象。 沒有規則阻止這種情況。

如果您不希望在臨時(在更常見的r值上)調用成員函數,則可以在函數聲明中使用ref-qualifier

但是正如你在這里看到的那樣, std::string::operator=沒有ref-qualified版本。

我不認為標准委員會允許這種行為有一個明確的目標; 我想這個選擇背后的理由是盡可能地給程序員強加規則,讓他找到一個有用的應用程序,如果有的話可以存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM