我是c ++的首发,我正在尝试开发一个简单的OpenGL应用程序。看一下互联网上的一些代码,我发现了这个:
::glutDisplayFunc(myPixmap::drawCallback);
忽略函数本身,我只是想知道那行代码的作用。它叫这个功能吗?我知道这可能是一个愚蠢的问题,但我找不到答案
答案 0 :(得分:5)
::
是范围解析运算符。
如果在它之前出现容器(名称空间或类)名称,则会导致编译器仅在该容器内查找指定的标识符。这是从类外部引用类的静态成员的方法。
如果它首先出现,前面没有名称,则意味着查看全局命名空间。
您的示例代码似乎包含两种用法。该行代码调用::glutDisplayFunc
。但是没有调用另一个函数myPixmap::drawCallback
。它的地址会保存以供日后使用。
答案 1 :(得分:2)
是的,它会调用该函数。前导“::”只表示必须在全局命名空间中找到该函数。例如:
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;
}
虽然whatever
(没有范围解析)在这种情况下调用全局函数 ,这取决于上下文 - 在不同的上下文中,它可以调用命名空间中的函数。使用前导::
可确保只调用全局函数,而不管上下文如何调用另一个名称空间中的函数。
答案 2 :(得分:0)
glutDisplayFunc设置当前窗口的显示回调。当GLUT确定需要重新显示窗口的法线平面时,将调用窗口的显示回调。在回调之前,当前窗口设置为需要重新显示的窗口(如果没有注册覆盖显示回调),则使用的层设置为法线平面。调用显示回调时没有参数。
在你的情况下,myPixmap :: drawCallback很可能是一个静态方法函数,没有参数,