C++ 中的所有这些语句在初始化(在声明对象时完成)和赋值的上下文中存在一个主要区别;最后一条语句a[5] 与其他语句相比也是完全不同的。
前提:如果a是某个数据类型的对象,例如int,我们可以给a分配一个合适的值(根据声明的数据类型)。注意:该值可以由有效的表达式计算,例如a = 2 + 3; 的行为与a = 5; 相同。
-
a = 5;
这是 C++ 程序中常用的赋值形式。它可以用于各自作用域中的初始化或以后的赋值(在声明a 之后)。如果a 被正确声明为int 类型,则此语句将5 的整数值分配给a 的int 变量a。
可以直接通过声明使用:
int a = 5;
第一次赋值(a 在其声明中未初始化时):
int a;
// some code may exist between.
a = 5;
或在声明中第一次赋值或初始化之后在相应范围内的任何其他位置进行赋值(取决于存储类):
int a; // declaration of `a`.
// some code may exist between.
a = 5; // first assignment of `a` with the value of `5`.
// some code may exist between.
a = 7; // assignment of the value of `7` to `a`.
-
a(5);
此语句将a 的int 变量初始化为5。它只能在声明时显式初始化时使用:
int a(5);
否则编译器很可能会抛出错误,因为它“认为”a 将是一个函数。
从技术上讲,a(5) 可以是一个函数,它将 5 的值作为参数通常很难,但它是 int 对象声明的上下文造成了不同之处。
a{5};
同2。它用5的值初始化a。 只能在声明时的初始化中使用:
int a{5};
否则编译器会抛出错误。
注意:初始化 int a{5}; 或 int a(5) 之类的值仅是 C++ 功能。用这种方式在 C 中初始化对象是不可能的。
a[5];
使用此语句,我们显然不会初始化或将5 的值分配给a 的变量。相反,我们定义了一个数组,一个对象簇,由5 对象组成,通过a 标识符表示为它自己的实体:
int a[5]; // declaration of `a` - `a` is an array of 5 int objects.
因此,我们这里没有单个对象,也没有为其分配任何值。
此外,我们必须区分数组的声明与:
int a[5];
以及后来访问数组a的某个int对象,如前面的例子:
a[4] = 12;
在这种情况下,a[4] 表示数组中的第 5th 对象,12 的值被分配给数组的第五个对象。
方括号内的数字,此处为4,称为索引号。请注意,索引号依次从0 开始。因此,a[0] 表示数组中的第一个对象,a[1] 表示第二个对象,依此类推。如果您将a 与int a[5]; 一起声明,则您不能以这种方式使用a[5],因为在这种情况下,它将代表第六个对象,该对象未在内存中为a 分配。