gpt4 book ai didi

c++ - 为什么这个静态 const int 成员变量似乎可以在数组定义中公开访问?

转载 作者:IT老高 更新时间:2023-10-28 21:43:40 26 4
gpt4 key购买 nike

我做出以下声明:

class Servo {

protected:

static const int maxServos = 16;
static Servo servos[maxServos]; //Array declaration
};

Servo Servo::servos[Servo::maxServos]; //Array definition

...它可以编译,这很棒!但是我不明白它为什么会编译,因为在我看来 maxServos 是 protected ,并且在定义数组时我在全局范围内使用它。我尝试在另一个全局上下文中使用它,确实出现了编译错误:

int main() {
std::cout << Servo::maxServos; //This will not compile.
}

那么发生了什么?数组的整个定义是否以某种方式由限定数组的命名空间限定?是编译器故障吗?

我在使用 Lubuntu 16.04 O/S 的 Raspberry PI 上使用 g++ -std::c++11。

最佳答案

这个定义

Servo Servo::servos[Servo::maxServos]; //Array definition

不是全局范围,由于(第一个)Servo:: 范围限定符,它是类范围。您可以通过删除多余的第二个作用域限定符使这一点更加清晰:

Servo Servo::servos[maxServos]; //Array definition

它仍然编译得很好。

TL;DR -- 声明符上的范围限定符使该范围内的同一声明符后面的所有内容。

关于c++ - 为什么这个静态 const int 成员变量似乎可以在数组定义中公开访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55577739/

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