如何在单个定义中定义多个声明符中的const引用

C++ How to define const reference in a multiple declarator in a single definition?

本文关键字:定义 引用 const 声明 单个      更新时间:2023-10-16

基本格式:

1. int x = 1, &r = x; -> good    
2. int x = 1;    
   const int &r = x; -> good
3. int x = 1;
   int const &r = x; -> good
4. int x, const int &r = x; -> failed
5. int x, const &r = x; -> failed

问题:

const int &r = x and
int const &r = x

似乎没有区别。

2)如何像4)和5)
那样使用单个定义编写const引用和其他int声明符

const int &r = xint const &r = x之间没有差异。

你想做的是不可能的。一个声明包含:

  1. A decl- specier -seq,decl- specier 的序列,如intconst。在大多数情况下,decl- specific -seqdecl-specifiers的顺序无关紧要。
  2. 一个init-declarator-list,是一个init-declarator 的列表。初始化声明器可以是x&r = x

通过单独组合eachinit-declaratoreverydecl-specifier来解释声明。因此,在单个声明中声明的所有实体都有一个共同的decl- specific -seq。由于constdecl说明符而不是声明符的一部分,因此不能将其仅应用于声明中的一个声明符。

再问(1),

const int &r = x and
int const &r = x

它们是一样的。

问题是const在语法上属于类型或直接在其左侧的*或函数头(对于形式函数参数类型递归地相同),除了声明的基本类型可以写const T而不是T const的特殊规则。因此,逗号后面的const在语法上是自由的,没有连接到任何东西。而且没有办法接"当前类型"或引入一些新的基本类型。

那么,重新回答问题(2),

如何使用单个定义与其他int声明符一起编写const引用,如[在同一声明中有多个声明符的示例]?

你没有。

就像你不能在一条语句中声明两种不同的类型,例如

int x, float y;

不能声明:

int x, const int y;
因为intconst int对编译器来说是不同的类型。