可能重复:
What is the meaning of prepended double colon “::” to class name?
我一直在研究遗留的C ++代码,它有类似的东西:
::putenv(local_tz_char);
::tzset();
在函数调用中添加“::”的语法是什么意思? Google-fu让我失望。
答案 0 :(得分:7)
在C ++中用于定义已经声明的成员函数(在 特定类的.hpp或.h扩展名的头文件。 在.cpp文件中,可以定义通常的全局函数或 该类的成员函数。区分正常 函数和类的成员函数,一个需要使用 范围解析运算符(::)在类名和。之间 成员函数名称,即ship :: foo()其中ship是一个类而foo() 是该类船的成员函数。
维基百科的例子:
#include <iostream>
// Without this using statement cout below would need to be std::cout
using namespace std;
int n = 12; // A global variable
int main() {
int n = 13; // A local variable
cout << ::n << endl; // Print the global variable: 12
cout << n << endl; // Print the local variable: 13
}
答案 1 :(得分:7)
这意味着编译器将在全局命名空间中查找函数putenv()
和tzset()
。
示例强>
#include <iostream>
using namespace std;
//global function
void foo()
{
cout << "This function will be called by bar()";
}
namespace lorem
{
void foo()
{
cout << "This function will not be called by bar()";
}
void bar()
{
::foo();
}
}
int main()
{
lorem::bar(); //will print "This function will be called by bar()"
return 0;
}
答案 2 :(得分:3)
昨天(+一年)就类似的问题进行了讨论。也许你可以在这里找到一个更深入的答案。
答案 3 :(得分:2)
这意味着:在全局命名空间中查找函数。
答案 4 :(得分:1)
它将使用特定的非限定名称(与使用using
关键字导入的任何内容相对)。
答案 5 :(得分:0)
::
是范围解析运算符,它告诉编译器在什么范围内找到该函数。
例如,如果你有一个带有局部变量var
的函数并且你有一个同名的全局变量,你可以选择通过预先设置范围解析运算符来访问全局变量:
int var = 0;
void test() {
int var = 5;
cout << "Local: " << var << endl;
cout << "Global: " << ::var << endl;
}
IBM C ++编译器文档就像这样(source):
::(范围解析)运算符用于限定隐藏名称 你仍然可以使用它们。如果a,您可以使用一元范围运算符 命名空间范围或全局范围名称由显式隐藏 在块或类中声明相同的名称。
对于类中的方法和外部相同名称的版本,也可以这样做。如果您想访问特定命名空间中的变量,函数或类,可以像下面这样访问它:<namespace>::<variable|function|class>
有一点需要注意,即使它是一个运算符,它也不是可以重载的运算符之一。