使用字符串文字而不使用命名空间 std

新手上路,请多包涵

C++ 社区建议不要使用 using namespace std; 。但是假设您想使用字符串文字,例如 auto s = "dummy"s; 。不使用 using namespace std; 导致编译失败。解决办法是什么?

原文由 E. Vakili 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 464
1 个回答

operator""s 位于命名空间 std 的 2 个内联命名空间中。它基本上看起来像这样:

 namespace std
{
    inline namespace literals
    {
        inline namespace string_literals
        {
            //operator""s implementation
            //...
        }
    }
}

因此,要仅获取字符串文字,请使用 using namespace std::string_literals;

或者,如果您想包含 每个 文字 - 包括字符串文字(如 s 如果您包含 chrono ,…): using namespace std::literals;

根据情况,您还可以考虑使用:

 using std::string_literals::operator""s;

而不是从该命名空间导入每个名称。

请注意,您仍然不应在全局级别将其包含在标头中(但您可以在您控制的内联或成员函数或命名空间中执行此操作)

原文由 Rakete1111 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题