我是从像这样在命令行上运行的C++ 11方案,列表初始化向量<string>用2炭[]指针
马科@主机$ ./program.out一个BB CCC
用于制作可执行的.cpp文件看起来是这样的:
#include<iostream>
#include<vector>
#include<string>
int main(int argc, char* argv[]){
std::vector<std::string> strs = {argv + 1, argv + argc};
std::cout << strs[2] << endl;
return 0;
}
当我运行它,它输出CCC。我没有想到,因为列表初始值设定项只包含char *类型的两个元素。我见过像这样的列表inits:
vector<string> strs = {"str1", "str2", ..., "strN"};
但指针init对我来说是全新的。看起来这些指针正被视为开始和结束迭代器。 我的问题是,编译器知道如何从argv + 1迭代到argv + argc来初始化strs中的单个字符串?只是为了把事情放在上下文中,是否有一种方法可以在C中以类似的方式使用列表初始化来初始化一个char *数组?
“有没有一种方法可以在C中以类似的方式使用列表初始化来初始化char *数组?”会很好,不是吗?但是,它正在执行一个构造函数,它后面有很多C++ voodoo,它们不存在于C上。 – user4581301