以下のC++コードでは、タイプはa
ですか?あなたは自動初期化リストのタイプ
auto a = { "lol", "life" };
を持っている場合typeid
戻りSt16initializer_listIPKcE
auto a = { "lol", "life" };
以下のC++コードでは、タイプはa
ですか?あなたは自動初期化リストのタイプ
auto a = { "lol", "life" };
を持っている場合typeid
戻りSt16initializer_listIPKcE
auto a = { "lol", "life" };
は、コンパイラは型はすべての要素が何であるかであるstd::initializer_list
を推測しようとします。この場合、"lol"
と"life"
は両方ともconst char[]
なので、std::initializer_list<const char*>
となります。
他にあなたが
auto foo = { 1, 2.0 };
のようなものを持っていた場合は要素の型が異なるため、その後は、コンパイルエラーを持っているでしょう。 1 expectionで次のように初期化子リストの自動控除のため
ルールである
auto x1 = { 1, 2 }; // decltype(x1) is std::initializer_list<int>
auto x2 = { 1, 2.0 }; // error: cannot deduce element type
auto x3{ 1, 2 }; // error: not a single element
auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
expection前C++ 17
auto x5{ 3 };
がstd::intializer_list<int>
あることがあるC++ 17ですでにルールを採用しているほとんどのコンパイラは、int
と推測されています。
あなたの質問への答えはあなたがタイプの非マングルされた名前を知りたい場合は、未定義のテンプレートのトリックを使用することができますstd::intializer_list<char const*>
です:それ
auto a = { "", ""};
get_type_name(a);
を呼び出す
template<typename T>
void get_type_name(T&&);
を
の行に沿って何かを示す読み取り可能なエラーメッセージが表示されます。 210undefined reference to `void get_type_name<std::initializer_list<char const*>&>(std::initializer_list<char const*>&)'
どのような規格を使用していますか? 11,14,17? auto initializer_listは少し揮発性です... – DeiDei
'const volatile auto a = {" trollin '"}}' –