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]
表示数组中的5
th对象,并将12
的值分配给数组的第五个对象。
方括号内的数字(此处为4
)称为索引号。注意,索引号依次从0
开始。因此,a[0]
表示数组中的第一个对象,a[1]
表示第二个对象,依此类推。如果您用a[5]
声明a
,那么您就不能以这种方式使用int a[5];
,因为在本例中,它表示的是第六个对象,它没有在内存中分配给a
。
https://stackoverflow.com/questions/59768374
复制相似问题