【发布时间】:2016-10-09 21:45:15
【问题描述】:
据我了解,C++ 中的声明/初始化是带有“基本类型”的语句,后跟以逗号分隔的声明符列表。
考虑以下声明:
int i = 0, *const p = &i; // Legal, the so-called base type is 'int'.
// i is an int while p is a const pointer to an int.
int j = 0, const c = 2; // Error: C++ requires a type specifier for all declarations.
// Intention was to declare j as an int and c an as const int.
int *const p1 = nullptr, i1 = 0; // p1 is a const pointer to an int while i1 is just an int.
int const j1 = 0, c1 = 2; // Both j1 and c1 are const int.
const int 是基本类型还是复合类型?
从上面第二个声明的错误来看,它似乎是一个基类型。如果是这样,那么第一个声明呢?
换句话说,如果第一个语句是合法的,为什么第二个不是?另外,为什么第三个和第四个语句的行为不同?
【问题讨论】:
-
将多个声明放在一行中可能会导致混淆。即使你做对了,下一个读者也可能不理解(下一个读者可能是几个月后的你)。恕我直言,最佳做法是每行声明一个变量。但不要误会我的意思,了解它的工作原理当然很好
-
C++ 中没有基本类型这样的东西。
int是一种类型,而const、*和&是类型限定符的示例。声明使用类型和(可选)类型限定符来创建标识符。 -
@Peter C++ 中也没有“类型限定符”。
const是一个 cv 限定符(它既可以是声明符也可以是说明符),而*和&是声明符。 -
@tobi303:我认为在一行中声明的多个变量没有任何问题......只要它们具有相同的类型。当你开始混合类型时,我会擦亮我的电锯。
-
这对初学者来说真是个问题!欢迎使用 C++,我期待您在未来做出贡献。
标签: c++ pointers constants language-lawyer declaration