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

标签 c++ c++11

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

最佳答案

operator""s位于命名空间 std 的 2 个内联命名空间中。基本上是这样的:

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

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

或者,如果你想包含 every 文字 - 包括字符串文字(如 s 秒,如果你包含 chrono,.. .): 使用命名空间 std::literals;.

根据情况,你也可以考虑使用:

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

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

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

关于c++ - 使用字符串文字而不使用命名空间 std,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38950008/

相关文章:

c++ - boost::any 结构和无符号整数

C++顺序读取多个输入文件

c++ - 为什么标准不允许定义下面的两个函数 `f`?

C++ 模板参数作为函数调用名称

c++ #ifdef Mac OS X 问题

c++ - 将抽象类实现为其他类的接口(interface)而无需 vtable 开销

c++ - 如何禁止对象的构造?

c++ - 具有混合数据类型的条件运算符?

c++ - 为什么成员变量不能作为参数的默认值?

c++ - 如何在 C++ 中同时拥有 32 位和 64 位 float