在同一范围内导入另一个命名空间后恢复到未命名的命名空间

问题描述 投票:0回答:1

我从教科书中得到了以下代码:

namespace sally {
    void message( ) {
        std::cout << "Hello from Sally.\n";
    }
} 

namespace {
    void message( ) {
        std::cout << "Hello from unnamed.\n";
    }
}

int main( ) {
    message(); 
    {
        message( );
        using sally::message;
        message( );
    }
    return 0;
} 

代码

using sally::message;
将对函数
message()
的默认调用更改为来自命名空间
sally
的调用。如果我想从未命名的命名空间调用
message()
,我确实知道我可以使用
::message()

但是是否可以将对

message()
(在范围内)的默认调用更改回未命名命名空间中的函数?

c++ namespaces unnamed-namespace
1个回答
1
投票

您可以将

(anonymous)::message
using ::message;
单独带入:

int main( ) {
    message(); 
    {
        message( );
        using sally::message;
        message( );
        {
            using ::message;
            message( );  // Lookup finds `::message` (introduced above) and stops looking in outer block scopes
        }
    }
    return 0;
}

它必须位于新的块作用域中,因为如果它位于同一作用域中,

message()
将会不明确。

© www.soinside.com 2019 - 2024. All rights reserved.