我是C++的新手,并且通过flightgear源代码趟过.我知道你可以限制指针的类型,就像这样
CRectangle * prect; //prect is a pointer that must point to an object of type CRectangle
Run Code Online (Sandbox Code Playgroud)
我也明白你可以引用命名空间中的变量,如下所示:
cout << first::var << endl; //prints value of var in namespace = first
cout << second::var << endl; //prints value of var in namespace = second
Run Code Online (Sandbox Code Playgroud)
话虽如此,我试图理解flightgear代码库中的这一行代码:
FGKeyboardInput * FGKeyboardInput::keyboardInput = NULL;
Run Code Online (Sandbox Code Playgroud)
看起来它正在创建一个名为keyboardInput的指针,类型为FGKeyboardInput.但我对keyboardinput之前的命名空间声明做了什么感到困惑.是否将变量键盘输入声明为命名空间FGKeyboardInput的一部分?在链接的命名空间教程中,通过将变量包含在命名空间括号中,将变量声明为某个命名空间的一部分.以上代码是否像这样的东西?
namespace FGKeyboardInput
{
FGKeyboardInput * keyboardInput = NULL;
}
Run Code Online (Sandbox Code Playgroud)
在C++中,符号名称具有范围和可见性.如果在命名空间中定义数据类型,则符号名称仅在该命名空间中可见.为了能够在当前范围中使用该符号名称,您需要导入该符号名称.有很多方法可以做到这一点:
所以当你使用时:
cout << first::var << endl;
Run Code Online (Sandbox Code Playgroud)
这意味着引用var位于命名空间中的内容first.请注意,如果它是静态成员,它还可能意味着引用var位于类\结构中的结构.
如上所述,
FGKeyboardInput * FGKeyboardInput::keyboardInput = NULL;
Run Code Online (Sandbox Code Playgroud)
似乎是在命名keyboardInput的类\结构内部命名的静态数据成员指针的定义,FGKeyboardInput它是指向该类型的指针FGKeyboardInput.