a = 5、a(5)、a{5}和a[5]在C++中的陈述有什么区别?
我偶尔会看到它们被用于为C++程序中的对象分配值。他们之间有什么区别?
发布于 2020-01-16 11:10:07
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;或在声明的第一次赋值或初始化(依赖于存储类)之后各自范围内的任何其他位置的赋值:
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); 此语句以int值初始化a的5变量。它只能在声明时的显式初始化时使用:
int a(5);否则编译器可能会抛出一个错误,因为它“认为”a将是一个函数。
从技术上讲,a(5)可以是一个函数,它将5的值作为一般的强硬参数,但在这里区别的是int对象声明的上下文。
a{5};与2一样,它用a的值初始化5。只有在声明时初始化时才能使用它:
int a{5};否则编译器会抛出一个错误。
注意:初始化像int a{5};或int a(5)这样的值仅是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的某个a对象,如前面的示例所示:
a[4] = 12;在本例中,a[4]表示数组中的5th对象,并将12的值分配给数组的第五个对象。
方括号内的数字(此处为4 )称为索引号。注意,索引号依次从0开始。因此,a[0]表示数组中的第一个对象,a[1]表示第二个对象,依此类推。如果您用a[5]声明a,那么您就不能以这种方式使用int a[5];,因为在本例中,它表示的是第六个对象,它没有在内存中分配给a。
https://stackoverflow.com/questions/59768374
复制相似问题