10
#include <chrono>

namespace X
{
using namespace std;
struct A
{
    std::chrono::seconds d = 0s; // ok
};
}

namespace Y
{
struct B
{
    std::chrono::seconds d = 0s; // error
};
}

错误信息是:

错误:没有匹配的文字运算符用于调用具有类型参数'unsigned long long'或'const char *'的'operator""s',并且没有匹配的文字运算符模板std::chrono::seconds d = 0s;

我的问题是:

我不想use namespace std;进去namespace Y;那么,我应该如何使其std::operator""s可见namespace Y

4

2 回答 2

12

如果你想拥有所有的计时文字,那么你可以使用

using namespace std::chrono_literals;

如果你只是想要operator""s那么你可以使用

using std::chrono_literals::operator""s;

请注意,至少在coliru gcc 上会针对上述行发出警告,但 clang 不会。对我来说不应该有任何警告。我在使用保留标识符时是否应该使用命令发出警告?

于 2017-01-03T13:05:52.380 回答
1

tl;博士:使用

using namespace std::string_literals

这些运算符在命名空间中声明std::literals::string_literals,其中literalsstring_literals都是内联命名空间。可以使用 、 和 来访问这些using namespace std::literals运算using namespace std::string_literalsusing namespace std::literals::string_literals

来源:https ://en.cppreference.com/w/cpp/string/basic_string/operator%22%22s

于 2020-06-16T14:41:21.640 回答