我有关于数组名称的问题a
int a[10]
Run Code Online (Sandbox Code Playgroud)
如何在C++中定义数组名称?常量指针?它是这样定义的还是我们可以这样看?可以对名称应用哪些操作?
Ste*_*sop 28
C++标准定义了数组是什么及其行为.看看索引.它不是指针,const或其他,它不是别的,它是一个数组.
要看到差异:
int a[10];
int *const b = a;
std::cout << sizeof(a); // prints "40" on my machine.
std::cout << sizeof(b); // prints "4" on my machine.
Run Code Online (Sandbox Code Playgroud)
显然a和b的类型不同,因为它们具有不同的尺寸.
在大多数情况下,数组名称"衰减"到指向其自己的第一个元素的指针.您可以将其视为自动转换.结果是一个rvalue,意味着它只是一个指针值,并且无法分配,类似于函数名称衰减到函数指针时.这并不意味着它是"const",但它不是可分配的.
所以一个数组"是"一个指针很像一个函数"是"一个函数指针,或一个长"是"一个int.也就是说,它不是真的,但是由于转换,你可以在大多数情况下将它用作一个.
一个数组名称不是一个常量指针 - 但是它在很多情况下就像在很多情况下一样(它在很多情况下转换为一个),就像它一样.
从6.3.2.1/3"其他操作数/左值,数组和函数指示符":
除非它是运算
sizeof符或一元运算&符的操作数,或者是用于初始化数组的字符串文字,否则将类型为"数组类型"的表达式转换为类型为"指向类型的指针"的表达式,该表达式指向数组对象的初始元素,而不是左值.
| 归档时间: |
|
| 查看次数: |
8887 次 |
| 最近记录: |