【问题标题】:Need to use :: with memcopy [duplicate]需要将 :: 与 memcopy 一起使用 [重复]
【发布时间】:2020-07-10 07:20:59
【问题描述】:

我了解到“::”是一个范围解析运算符,并且开始了解它的用途。

但是,我看到在某些代码中使用了没有前缀的“::”。我以前从未见过。例如:

::memcopy();
::GetKeyBoardState();

只是对语法感到好奇,需要在代码中使用“::”。我删除了“::”,而 Intellisense 并没有在红色下划线,所以想知道发生了什么。谢谢

【问题讨论】:

  • 为了确保它是从没有命名空间调用的,我猜。否则有人可能会写using namespace ...;,其中可能有同名的函数,这可能会导致歧义。
  • 旁注:Intellisense 会给你一个粗略的估计,如果你编译的结果是什么。实际上,编译通常会得到与 Intellisense 显示的完全不同的结果。

标签: c++ scope


【解决方案1】:

以 :: 开头而不是范围名称的限定名称是完全限定名称。这意味着名称是绝对的,因此不会执行相对名称查找。

例如:

void GetKeyBoardState();           // a

namespace foo {
    void GetKeyBoardState();       // b

    void bar() {
        ::GetKeyBoardState();      // calls a
        GetKeyBoardState();        // calls b
        foo::GetKeyBoardState();   // calls b
        ::foo::GetKeyBoardState(); // calls b
    }
}

void bar() {
    ::GetKeyBoardState();          // calls a
    GetKeyBoardState();            // calls a
    foo::GetKeyBoardState();       // calls b
    ::foo::GetKeyBoardState();     // calls b
}

这类似于绝对和相对路径在文件系统以及完全限定域名与主机名中的工作方式。

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多