Mam następujących funkcji szablonu:Jaka jest różnica między std :: initializer_list <int> ({1,2,3}) i {1,2,3}?
template<typename T> void foo2(T t) {}
wiem, że nie można nazwać go za pomocą:
foo2({1,2,3});
ponieważ lista inicjująca jest non wyprowadzoną kontekst dla szablonu argumentu. Muszę użyć:
foo2<std::initializer_list<int>>({1,2,3});
ale mogę również użyć:
foo2(std::initializer_list<int>({1,2,3}));
co sprawia, że zastanawiam się, jaka jest różnica pomiędzy: {1,2,3}
i std::initializer_list<int>({1,2,3})
?
'std :: initializer_list ({1,2,3})' jest wyrażeniem typu 'std :: initializer_list '. '{1,2,3}' nie jest wyrażeniem. Lista usztywniona może występować tylko w kontekstach, które definicja języka wyraźnie pozwala na to, nie tylko w dowolnym miejscu, w którym może wystąpić wyrażenie. –
@ M.M Gdy znasz odpowiedź na pytanie z 0 odpowiedziami, ale potem okazuje się, że odpowiedź została wyrażona w komentarzach. (͡ ° ʖ̯ ͡ °) – luk32
@ luk32 Zapraszam do napisania odpowiedzi ... myślę, że pełna odpowiedź powinna obejmować szczegóły szablonu, który nie jestem tak pewien o –