Shi*_* Xu 1 c++ initialization
我希望创建一个MyClass的向量,例如以下课程类。我希望将字符串数组作为课程名称传递。所以我写
struct Course {
int id;
string name;
static int id_generator;
Course() {}
Course(string s);
};
Course::Course(string s) {
name = s;
id = id_generator++;
}
int Course::id_generator = 0;
Run Code Online (Sandbox Code Playgroud)
这有效
string course_names[] = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};
vector<Course> course_vector(begin(course_names), end(course_names));
Run Code Online (Sandbox Code Playgroud)
但这不是
vector<Course> course_vector = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};
error: could not convert ‘{"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<Course>’
Run Code Online (Sandbox Code Playgroud)
为什么?怎么做更好?
用于将聚合类型作为数组的聚合初始化:
string course_names[] = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};
Run Code Online (Sandbox Code Playgroud)
与initializer_list初始化不同。std::vector提供了一个带有的构造函数,std::initializer_list<T>当您尝试vector使用花括号初始化a时,该构造函数就会被调用。为了使其正常工作,您需要为每个元素添加大括号:
std::vector<Course> course_vector = {{"Linux"},
{"C++"},
{"HTML"},
{"HTML5"},
{"NodeJS"},
{"Shell"},
{"Python"}};
Run Code Online (Sandbox Code Playgroud)
另外,将您的构造函数更改为:
Course::Course(std::string const &s) : id(id_generator++), name(s) { }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |