struct Student {
Student(){
}
};
和枚举:
enum studenttype_t { levelA = 0, levelB = 1, levelC = 2 };
然后在其他地方声明:
vector<Student *> student;
可以按如下方式使用:
student[levelA] = new Student();
如果是这样,student[levelA]
是什么意思?在这种情况下是0
吗?最后一个陈述的功能是什么,即student[levelA] = new Student();
?感谢
答案 0 :(得分:5)
是的,levelA
是0. C ++允许从枚举值到int的静默转换(与C#不同,需要显式转换)。
student[levelA] = new Student();
表示在堆中分配内存,在该内存中创建一个Student对象,并将新对象的地址存储到student
向量的第一个元素中。但是,向量中没有必要的元素 - 当它被创建时,它的长度为0 - 所以这实际上是未定义的行为。
student.push_back(new Student());
表示将新对象添加到向量的下一个(当前第一个)元素。
答案 1 :(得分:2)
正是 student[LevelA]
的含义。矢量就像一个数组,但可扩展。所有
enum studenttype_t { levelA = 0, levelB = 1, levelC = 2 };
vector<Student *> student(5); // need a size, else defaults to zero.
student[levelA] = new Student();
正在创建这样一个向量(Student
指针)并创建第一个向量(索引0)。
答案 2 :(得分:1)
levelA是常量,0。学生是向量,学生[levelA]是该向量的第0个元素。向量的元素是Student *类型,即指向Student对象的指针。
student[levelA] = new Student();
使用新的Student类实例化student [0]。