按照C++ 17初始化程序規則auto x{123};
應int
但在C++ 11/C++ 14模式不同的編譯器嘗試了這一點,將表明,一些編譯器將它推到一個int
,而其他將它演繹到自動初始化typeid的信息
std::initialzer_list<int>
我使用C++ 17只是爲了測試
#include<iostream>
#include <typeinfo>
int main()
{
auto x{123};
auto y={1,2};
std::cout<<"Type is "<<typeid(x).name()<<std::endl;
std::cout<<"Type is "<<typeid(y).name()<<std::endl;
}
輸出
Type is i
Type is St16initializer_listIiE
Program ended with exit code: 0
不應它被示出 期望輸出
Type is int
由於它是存在於以下參考碼
http://en.cppreference.com/w/cpp/language/typeid
我的問題基本上是「我」和「INT」 –
啊之間的差異,那麼,這是實施依賴。 msvc返回int,對於intializer_list,它返回'class std :: initializer_list'。我會說類型信息是安全的比較另一種類型的信息調用,但不是針對一個字符串(如果你想讓你的代碼是可移植的)。 –
Josh
@HariomSingh在這種情況下,你的大部分問題是無關緊要的,應該編輯出來。 'int main(){std :: cout << typeid(int).name()<<'\ n'; }'就已經足夠了,沒有必要在'auto'帶來,沒必要在'的std :: initializer_list'帶來,沒必要帶在C++ 11/C++ 14/C++ 17倍的差別。 –
hvd