:(成员方法名称)在c+中做什么+; 我是C++的初学者,我正在尝试开发一个简单的OpenGL应用程序。查看互联网上的一些代码,我发现: ::glutDisplayFunc(myPixmap::drawCallback);

:(成员方法名称)在c+中做什么+; 我是C++的初学者,我正在尝试开发一个简单的OpenGL应用程序。查看互联网上的一些代码,我发现: ::glutDisplayFunc(myPixmap::drawCallback);,c++,C++,忽略函数本身,我只是想知道那行代码的作用。它调用函数了吗?我知道这可能是个愚蠢的问题,但我找不到答案。:是范围解析运算符 如果容器(命名空间或类)名称出现在其前面,则会导致编译器仅在该容器内查找指定的标识符。这是从类外部引用类的静态成员的方法 如果它首先出现,前面没有名称,则意味着要查看全局名称空间 您的示例代码似乎包含这两种用法。这行代码调用::glutDisplayFunc。但是没有调用另一个函数,myPixmap::drawCallback。它的地址将保存以备以后使用。::是范围解析运算符

忽略函数本身,我只是想知道那行代码的作用。它调用函数了吗?我知道这可能是个愚蠢的问题,但我找不到答案。

是范围解析运算符

如果容器(命名空间或类)名称出现在其前面,则会导致编译器仅在该容器内查找指定的标识符。这是从类外部引用类的静态成员的方法

如果它首先出现,前面没有名称,则意味着要查看全局名称空间


您的示例代码似乎包含这两种用法。这行代码调用
::glutDisplayFunc
。但是没有调用另一个函数,
myPixmap::drawCallback
。它的地址将保存以备以后使用。

::
是范围解析运算符

如果容器(命名空间或类)名称出现在其前面,则会导致编译器仅在该容器内查找指定的标识符。这是从类外部引用类的静态成员的方法

如果它首先出现,前面没有名称,则意味着要查看全局名称空间


您的示例代码似乎包含这两种用法。这行代码调用
::glutDisplayFunc
。但是没有调用另一个函数,
myPixmap::drawCallback
。它的地址会保存以备以后使用。

是的,它会调用该函数。前导“:”表示必须在全局命名空间中找到该函数。例如:

namespace X { 
    void whatever() {}
};

void whatever() {}

int main() { 
    whatever(); // calls the global function
    ::whatever(); // also calls global function
    X::whatever(); // calls the function in the namespace
    return 0;
}

尽管在本例中,
无论什么(没有范围解析)调用全局函数,这取决于上下文——在不同的上下文中,它可以调用命名空间中的函数。使用前导的
::
确保只能调用全局函数,而不能调用另一个命名空间中的函数,而不管上下文如何。

是的,它调用函数。前导“:”表示必须在全局命名空间中找到该函数。例如:

namespace X { 
    void whatever() {}
};

void whatever() {}

int main() { 
    whatever(); // calls the global function
    ::whatever(); // also calls global function
    X::whatever(); // calls the function in the namespace
    return 0;
}
尽管在本例中,
无论什么(没有范围解析)调用全局函数,这取决于上下文——在不同的上下文中,它可以调用命名空间中的函数。使用前导的
确保只能调用全局函数,而不能调用另一个命名空间中的函数,而不管上下文如何。

设置当前窗口的显示回调。当GLUT确定需要重新显示窗口的法线平面时,将调用窗口的显示回调。在回调之前,当前窗口被设置为需要重新显示的窗口,并且(如果没有注册覆盖显示回调),正在使用的层被设置为法线平面。调用显示回调时没有参数

在您的例子中,myPixmap::drawCallback很可能是一个静态方法函数,不带任何参数,

设置当前窗口的显示回调。当GLUT确定需要重新显示窗口的法线平面时,将调用窗口的显示回调。在回调之前,当前窗口被设置为需要重新显示的窗口,并且(如果没有注册覆盖显示回调),正在使用的层被设置为法线平面。调用显示回调时没有参数


在您的例子中,myPixmap::drawCallback很可能是一个静态方法函数,不带任何参数,

::+(
看起来像一些异国情调的表情(好吧,糟糕的笑话)。但是
本身将您指向一个合适的命名空间
:+(
看起来像一些异国情调的表情(好吧,糟糕的笑话)但是
::
本身就为您指出了一个正确的解决方案namespace@MooingDuck:但可能他说的是
myPixmap::drawCallback
@MooingDuck:那行代码调用了
::glutDisplayFunc
。但是另一个函数,
myPixmap::drawCallback
,没有调用。它的地址会被保存下来,以备以后使用。@MooingDuck:但可能他是ta关于
myPixmap::drawCallback
@MooingDuck:这行代码调用
::glutDisplayFunc
。但是另一个函数,
myPixmap::drawCallback
,没有被调用。它的地址被保存以备以后使用。同样值得注意的是,如果代码中包含“使用名称空间X;”同样值得注意的是,如果代码包含“using namespace X;”声明,则非限定调用将变得不明确。