这个c ++声明的目的是什么?

时间:2010-08-19 01:13:31

标签: c++ syntax

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();?感谢

3 个答案:

答案 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]。