使用::在C++中

使用::在C++中,c++,syntax,C++,Syntax,所以,在别人叫我用谷歌搜索之前,我已经做了,这就是我来这里的原因 我的问题是— 除了构造函数之外,如何将::用于其他对象 我知道构造函数的正确规则是,它们必须与它们所属的类具有相同的名称。但在这段代码中,它的使用与此无关。有人能告诉我为什么和怎么做吗 编辑:我忘了提到,第一个块是头文件,第二个是指向所述头文件的cpp源 只要在另一个命名对象中找到给定的名称,但包含的对象不是对象,而是类、命名空间或枚举,就会使用::符号 namespace n { struct s { e

所以,在别人叫我用谷歌搜索之前,我已经做了,这就是我来这里的原因

我的问题是—

除了构造函数之外,如何将::用于其他对象

我知道构造函数的正确规则是,它们必须与它们所属的类具有相同的名称。但在这段代码中,它的使用与此无关。有人能告诉我为什么和怎么做吗

编辑:我忘了提到,第一个块是头文件,第二个是指向所述头文件的cpp源

只要在另一个命名对象中找到给定的名称,但包含的对象不是对象,而是类、命名空间或枚举,就会使用::符号

namespace n {
    struct s {
        enum e {
            q
        };
    };
}

n::s::e my_value = n::s::e::q;

它是左关联的,因此在本例中,e位于n::s中,q位于n::s::e中。

您所说的是范围解析运算符::。它用于描述范围

int a=5;   //Global Variable

int main() {
     int a=1;  //local variable
     cout<<a;
     cout<<::a;  //We are explicitly mentioning that we need the global scope 'a' variable
     return 0;
}
输出:

一, 五,

构造函数只是一个方法,您可以创建自己的方法来初始化日期成员。创建对象时,将自动调用与类同名的构造函数

通常,在创建对象时会调用默认构造函数来初始化对象,这是自动的。 然后,您可以显式调用您的方法来为您想要的数据成员设置值


对于您的案例的正确解释,请查看此答案的顶部注释

Can::used For the this not constructor?-是的,它可以。构造函数只是一种方法。在您的问题中,所有4种::用法都与构造函数无关。这里甚至没有任何构造函数……您所说的是范围解析运算符。@HolyBlackCat这就是我为什么要问这个问题的原因在给定的示例中,默认构造函数是微不足道的,所以没有调用它。该成员是静态的,因此未创建、初始化或未初始化。这些方法修改一个全局变量。
namespace n {
    struct s {
        enum e {
            q
        };
    };
}

n::s::e my_value = n::s::e::q;
int a=5;   //Global Variable

int main() {
     int a=1;  //local variable
     cout<<a;
     cout<<::a;  //We are explicitly mentioning that we need the global scope 'a' variable
     return 0;
}