C++ 中 a = 5、a(5)、a{5} 和 a[5] 有什么区别?
What is the difference between a = 5, a(5), a{5} and a[5] in C++?
C++中的a = 5
、a(5)
、a{5}
、a[5]
语句有什么区别?
我偶尔会看到它们用于任何事情,比如在 C++ 程序中为对象赋值。它们的区别在哪里?
C++ 中的所有这些语句在初始化(在对象声明时完成)和赋值上下文中存在主要区别;与其他语句相比,最后一个语句 a[5]
也是完全不同的东西。
前提:如果a
是某种数据类型的对象,比如int
,我们可以给a
赋一个合适的值(根据声明的数据类型)。注意:该值可以通过有效表达式求值,例如 a = 2 + 3;
与 a = 5;
.
的行为相同
a = 5;
这是 C++ 程序中常用的赋值形式。它可以用于各自范围内的初始化或稍后赋值(在 a
声明之后)。如果 a
被正确声明为 int
类型,则此语句将 5
的整数值分配给 a
的 int
变量。
可以通过声明直接使用:
int a = 5;
第一次赋值(当a
在声明时没有初始化):
int a;
// some code may exist between.
a = 5;
或者在声明中的第一次赋值或初始化之后在相应范围内的任何其他地方赋值(取决于存储 class):
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);
此语句用 5
的值初始化 a
的 int
变量。它可以在声明时的显式初始化时仅使用:
int a(5);
否则编译器很可能会抛出错误,因为 "thinks" 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]
表示数组中的第 5
个对象,12
的值分配给数组的第五个对象。
方括号内的数字,此处为4
,称为索引号。请注意,索引号连续从 0
开始。因此,a[0]
表示数组中的第一个对象,a[1]
第二个对象,依此类推。如果你用 int a[5];
声明 a
,你不能以这种方式使用 a[5]
,因为在这种情况下,它代表第六个对象,它没有在内存中分配给 a
.
C++中的a = 5
、a(5)
、a{5}
、a[5]
语句有什么区别?
我偶尔会看到它们用于任何事情,比如在 C++ 程序中为对象赋值。它们的区别在哪里?
C++ 中的所有这些语句在初始化(在对象声明时完成)和赋值上下文中存在主要区别;与其他语句相比,最后一个语句 a[5]
也是完全不同的东西。
前提:如果a
是某种数据类型的对象,比如int
,我们可以给a
赋一个合适的值(根据声明的数据类型)。注意:该值可以通过有效表达式求值,例如 a = 2 + 3;
与 a = 5;
.
a = 5;
这是 C++ 程序中常用的赋值形式。它可以用于各自范围内的初始化或稍后赋值(在 a
声明之后)。如果 a
被正确声明为 int
类型,则此语句将 5
的整数值分配给 a
的 int
变量。
可以通过声明直接使用:
int a = 5;
第一次赋值(当a
在声明时没有初始化):
int a;
// some code may exist between.
a = 5;
或者在声明中的第一次赋值或初始化之后在相应范围内的任何其他地方赋值(取决于存储 class):
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);
此语句用 5
的值初始化 a
的 int
变量。它可以在声明时的显式初始化时仅使用:
int a(5);
否则编译器很可能会抛出错误,因为 "thinks" 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]
表示数组中的第 5
个对象,12
的值分配给数组的第五个对象。
方括号内的数字,此处为4
,称为索引号。请注意,索引号连续从 0
开始。因此,a[0]
表示数组中的第一个对象,a[1]
第二个对象,依此类推。如果你用 int a[5];
声明 a
,你不能以这种方式使用 a[5]
,因为在这种情况下,它代表第六个对象,它没有在内存中分配给 a
.