为什么不允许我们访问没有公共成员函数的类外私有静态成员?
Why aren't we allowed to access a private static member outside class without public member function?
这可能是一个愚蠢的疑问,但我不能理解为什么我不能访问类外的私有静态数据成员,当我被允许定义它。
例如:在下面的代码中:
class foo
{
static int A;
public:
int getA{return A;}
};
//This is allowed
int foo:A=0;
int main()
{
//This gives error
cout<<foo:A;
}
int foo::A = 0;
为成员变量A
分配存储空间,并用0
初始化它(实际上静态变量默认是用0
初始化的,所以这个赋值是多余的)。您只需在实现.cpp文件中执行一次。然后每个人都可以实例化你的类,而没有任何链接器问题。注意,您不能再这样做了,也就是说,稍后分配foo::A = 42;
将不会编译,所以您不会破坏任何访问规则。事实上,你必须显式地分配存储是一个语言规则,在我看来,这会造成更多的混乱(我让编译器在声明静态时自动分配存储)。
相关文章:
- 如何在C++中使用非静态成员函数作为回调函数
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 为什么传递非静态成员函数会导致编译错误?
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 非静态成员函数的 decltype 格式不正确吗?
- std::异步与非静态成员函数
- C++无效使用非静态成员函数?
- 未使用的C++未优化的静态成员函数/变量
- C++:如何返回指向非静态成员函数的指针?
- 使用静态成员函数而不是普通函数是否有任何开销?
- 在 stream_descriptor::async_wait 中无效使用非静态成员函数
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- 无法在clang Linux中分配非静态成员函数,但我可以在Visual Studio Windows中分配
- 在类定义中推导内联静态成员函数的返回类型
- `enable_if()`以禁用模板化类的静态成员函数声明
- 错误:无效使用非静态成员函数"int test::hotplug_callback(libusb_contex
- 常量静态成员函数
- 使用 vector.sort() 的非静态成员函数无效使用
- 从静态成员函数访问私有非静态类变量 - C++