为什么这个initializer_list在传递字符串时会出现异常?

Joh*_*itb 9 c++ iterator c++11 stdinitializerlist

我已经尝试了我的G ++版本的C++ 0x初始化列表实现,但它只输出空行.

#include <initializer_list>
#include <iostream>
#include <string>

int main() {
  std::initializer_list<std::string> a({"hello", "stackoverflow"});
  for(auto it = a.begin(), ite = a.end(); it != ite; ++it)
    std::cout << *it << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么.有人可以帮帮我吗?

Naw*_*waz 1

std::initializer_list<std::string> a({"hello", "stackoverflow"});
Run Code Online (Sandbox Code Playgroud)

如果我声明为:

std::initializer_list<std::string> a{"hello", "stackoverflow"}; //without ()
Run Code Online (Sandbox Code Playgroud)

然后它就可以工作了: http: //ideone.com/21mvL

但这很奇怪。看起来它是一个编译器错误。


编辑:

它肯定是一个编译器错误,因为如果我编写(*it).c_str()它会打印字符串!

std::initializer_list<std::string> a({"hello", "stackoverflow"}); //with ()
for(auto it = a.begin(), ite = a.end(); it != ite; ++it)
   std::cout << (*it).c_str() << std::endl;
Run Code Online (Sandbox Code Playgroud)

代码: http: //ideone.com/hXr7V