我试过我的G ++版本的C++ 0x初始化列表实现,但它只输出空行。为什么initializer_list在传递字符串时使用不当?
#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;
}
我不知道我做错了什么。任何人都可以帮我吗?
这将打印字符串' “你好”'太:http://ideone.com/C9Q7p -.- – 2011-04-09 14:51:10
@Johannes:如果您删除'c_str()',它不会打印'“你好”':http://ideone.com/NTRUh ...我很困惑。它有什么问题? – Nawaz 2011-04-09 14:57:58
这是因为你正在引用局部变量(当函数返回时超出了范围)。当你使用c_str()时,你只是幸运的(或者不幸的,取决于观点),内存仍然包含对char *字符串的引用,并且堆区还没有被覆盖。 :) – Vitus 2011-04-11 19:15:38