C++ 中的 a = 5、a(5)、a{5} 和 a[5] 有什么区别?

Rob*_*rtS 1 c++ syntax initialization variable-assignment assignment-operator

是什么的语句之间的差别a = 5a(5)a{5}以及a[5]在C ++?

我偶尔会看到它们用于诸如在 C++ 程序中为对象赋值之类的事情。它们之间的区别在哪里?

Rob*_*rtS 5

在初始化(在声明对象时完成)和赋值的上下文中,C++ 中的所有这些语句之间存在主要区别;与其他语句a[5]相比,最后一个语句也是完全不同的。


前提:如果a是某个数据类型的对象,比如int,我们可以给 分配一个合适的值(根据声明的数据类型)a。注意:该值可以由有效表达式计算,例如a = 2 + 3;行为与a = 5;.


  1. a = 5;

这是 C++ 程序中常用的赋值形式。它可以用于a各自作用域中的初始化或稍后的赋值(在 的声明之后)。如果a正确声明为类型int,则此语句将整数值分配5int变量a

它可以通过声明直接使用:

int a = 5;
Run Code Online (Sandbox Code Playgroud)

第一次赋值(whena未在其声明中初始化):

int a;
// some code may exist between.
a = 5;
Run Code Online (Sandbox Code Playgroud)

或者在声明中的第一次赋值或初始化之后在相应范围内的任何其他地方赋值(取决于存储类):

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`.
Run Code Online (Sandbox Code Playgroud)
  1. a(5);

该语句用 的值初始化int变量。它只能在声明时的显式初始化时使用:a5

int a(5);
Run Code Online (Sandbox Code Playgroud)

否则编译器很可能会抛出一个错误,因为它“认为”这a将是一个函数。

从技术上讲,它a(5)可以是一个函数,它通常将 的值5作为参数,但它是int对象声明的上下文,在这里有所不同。


  1. a{5};

与 2 相同。它a以 的值初始化5。它只能在声明时的初始化中使用:

int a{5};
Run Code Online (Sandbox Code Playgroud)

否则编译器会抛出错误。


注意:初始化一个类似于int a{5};int a(5)只是 C++ 特性的值。不可能以这种方式在 C 中初始化对象。


  1. a[5];

使用这个语句,我们显然没有初始化或分配 的值5给 的变量a。相反,我们定义了一个数组,一组对象,由5对象组成,由以下标识符表示为自己的实体a

int a[5]; // declaration of `a` - `a` is an array of 5 int objects.
Run Code Online (Sandbox Code Playgroud)

因此,我们这里没有单个对象,也没有为其分配任何值。

此外,我们必须区分数组的声明:

int a[5];
Run Code Online (Sandbox Code Playgroud)

然后访问int数组的某个对象,a例如:

a[4] = 12;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a[4]代表5数组内的第 th 个对象,并且 的值12被分配给数组的第五个对象。

方括号内的数字在这里4称为索引号。请注意,索引号依次从 开始0。因此,a[0]代表数组中的第一个对象,a[1]第二个,依此类推。a[5]如果您声明为awith ,则不能以这种方式使用,int a[5];因为在这种情况下,它将代表第六个对象,该对象未在内存中分配给a.

  • `a = 5;// 用值为 5 初始化 a。` 从技术上讲,这是一个赋值。初始化必须是声明的一部分:`int a = 5;`。 (8认同)