[英]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.