C++ 在C++;,访问说明符不控制静态成员的可见性吗?
代码示例来自: 此代码编译时没有警告或错误。我不明白为什么C++ 在C++;,访问说明符不控制静态成员的可见性吗?,c++,class,static,C++,Class,Static,代码示例来自: 此代码编译时没有警告或错误。我不明白为什么 我们尝试访问s\n值是否应该得到警告,因为它是私有的?或者这些访问说明符不适用于静态成员?s\u nValue的定义不是从类外部“访问”成员,而是它的实现。如果将其放置在封闭类声明之外的源文件中,则可以将其视为与成员函数的实际实现类似 换句话说,访问说明符绝对平等地应用于静态成员。这是类的private静态成员的定义,因此它是允许的。因为类的静态成员的定义必须在类之外,无论它是private还是public 简而言之,它不是在访问成员,
我们尝试访问
s\n值
是否应该得到警告,因为它是私有的?或者这些访问说明符不适用于静态成员?s\u nValue的定义不是从类外部“访问”成员,而是它的实现。如果将其放置在封闭类声明之外的源文件中,则可以将其视为与成员函数的实际实现类似
换句话说,访问说明符绝对平等地应用于静态成员。这是类的private
静态成员的定义,因此它是允许的。因为类的静态成员的定义必须在类之外,无论它是private
还是public
简而言之,它不是在访问成员,而是在定义它,就像您在类之外定义
private
函数一样 另请注意:不要混淆赋值和构造函数。该行:
int Something::s_nValue = 1;
不是“赋值”,而是在构造对象。一般而言:
ClassA Something::s_nValue(...parameters...);
C++允许构造函数使用“赋值”式语法。例如:
class A
{
public:
A(int i) { m_i = i; }
int getI() { return m_i; }
private:
int m_i;
};
class B
{
public:
static int getAI() { return a.getI(); }
private:
static A a;
};
A B::a = 2;
class A
{
public:
A(int i) { m_i = i; }
int getI() { return m_i; }
private:
int m_i;
};
class B
{
public:
static int getAI() { return a.getI(); }
private:
static A a;
};
A B::a = 2;