我正在学习C ++,我遇到过这个问题,我只需要解释一下,我猜我需要阅读我的书。
以下所有内容都是合法的。
int a, b = 5, c = 10;
int a = 0, *b = &a, &c = a;
int a, *const b = &a, c = 10;
但这样做是违法的,或者至少是''现在还不是一个常规。
int a = 0, const b = 5, c = 0;
*编辑,我想我自己也得到了它,因为指针是一个对象,就像' b'只是一个标识符。
答案 0 :(得分:0)
这是声明构造方式的结果。 简单声明(我们在这里关注的类型)是
decl-specifier-seq opt init-declarator-list opt ;
init-declarator-list 只是一个以逗号分隔的 init-declarator 列表,而 init-declarator 是一个声明符后跟可选的初始值设定项。
在int const b = 5
( 完全有效)中,const
(以及int
)是 decl-specifier-seq的一部分; b = 5
是 init-declarator - b
是声明符,= 5
是初始化程序
然而,在int * const b = 0;
中, decl-specifier-seq 只是int
; 声明符是* const b
- * const
一起是 ptr-operator ,它是声明者的一部分。
const b
不是有效的声明者,因此int a = 0, const b = 5, c = 0;
无效。 * const b
是有效的声明者,因此int a, *const b = &a, c = 10;
有效。