为什么::(范围)与空的左操作数一起使用?

rep*_*ant 11 c++ scope operator-keyword

我现在已经看过几次了,我一直在摸不着头脑,想知道为什么......

例如:(http://www.codeguru.com/forum/showthread.php?t=377394)

void LeftClick ( )
{  
  INPUT    Input={0};
  // left down 
  Input.type      = INPUT_MOUSE;
  Input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
  ::SendInput(1,&Input,sizeof(INPUT));

  // left up
  ::ZeroMemory(&Input,sizeof(INPUT));
  Input.type      = INPUT_MOUSE;
  Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
  ::SendInput(1,&Input,sizeof(INPUT));
}
Run Code Online (Sandbox Code Playgroud)

这个例子在没有::(范围)运算符的情况下工作,为什么它们甚至在那里呢?

Gio*_*hal 27

这基本上意味着"获取GLOBAL范围的功能,而不是当前可见的功能".

void SendInput() { /* (1) */
}

namespace derp {
    void SendInput() { /* (2) */
    }

    void LeftClick() {
        ...
        ::SendInput(); /* matches (1) */
        SendInput();  /* matches (2) */
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下(它意味着全球).它实际上意味着使用"绝对命名空间路径"而不是"相对命名空间路径".它恰好是这个上下文中的短路径,因此在全局命名空间中. (3认同)