gpt4 book ai didi

c++ - 类型限定符出现在多项声明中(表现出与指针的奇怪行为)

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:51 26 4
gpt4 key购买 nike

当我尝试这样做时:

   int Var_1 =3, const Var_2 =34;

它抛出一个错误,我知道(任何)类型限定符 const 不能出现在多项声明中的第一个逗号之后(如前所述 here ) 但是当用指针引发限定符时,它会改变其行为”

   int Var_1 =3, *const Var_2 = &Var_1; //works fine

有人可以解释一下吗?

最佳答案

这与从 C 继承而来的 C++ 中声明的奇怪方式有关。

问题中显示的声明的一般结构如下:您有一系列说明符,后跟一个或多个逗号分隔的声明符,其中每个声明符都可以有一个可选的初始化器

关键字 constint 是说明符,所以它们放在开头。每个说明符修改所有声明符。例如:

const int *x, y[10];

在此声明中有两个说明符,即constint,以及两个声明符,即*xy[ 10]。两个说明符中的每一个都修改两个声明符。

说明符描述的类型信息只能出现在开头,因为所有说明符都必须在所有声明符之前。这是语言的规则。

但是,某些类型信息由声明符携带。显然 xy 在上面的声明中有不同的类型,即使它们被相同的说明符修改; x 是指针类型,y 是数组类型。可以将声明符视为由声明的实体的名称以及一些运算符组成。 * 运算符创建一个指针,而 [] 运算符创建一个数组。这些运算符可以组合和嵌套,它们的优先级可以用括号改变。

我们可以将 *const Var_2 解释为声明符,方法是将 *const 视为生成 const 限定指针的运算符。此语法是必需的,因为 const int* p 生成指向 const int 的指针,而不是指向 intconst 指针.因此,*const Var_2 中的 const 起着与它在说明符中不同的作用,并且在语法上是允许的,只是因为它是 *const< 的一部分 运营商。但是,const 本身并不是可以出现在声明符中的有效运算符,当您将它放在逗号之后时,它就不再是说明符了。

关于c++ - 类型限定符出现在多项声明中(表现出与指针的奇怪行为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47406762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com