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;