簡體   English   中英

此輸出有效還是編譯器錯誤?

[英]Is this output valid or a compiler bug?

#include <iostream>
#include <string>

int main(int argc, char *argv[])
{
    std::string s = {123};
    std::cout << s << std::endl;
}

為什么該程序將{打印為輸出? 底層詞法分析器中的錯誤是僅打印前面的{嗎?

我使用g ++ 4.8.1進行了編譯(沒有錯誤或警告)。 MSVC不會抱怨string不是聚合類型,因此無法進行編譯。

您正在使用字符數組對字符串進行列表初始化。 123{ASCII碼 沒有編譯器錯誤。

您要調用的構造函數是std::string的initalizer-list構造函數(請參閱此處以獲取參考),如C ++ 11 Standard的21.4.2 / 15段所指定:

 basic_string(std::initializer_list<CharT> init, const Allocator& alloc = Allocator()); 

效果 :與basic_string(il.begin(), il.end(), a)

MSVC不支持列表初始化,這就是為什么您收到消息抱怨string不是聚合事實的原因。

暫無
暫無

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

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