C++11 运算符""带双参数

标签 c++ c++11 literals

考虑:

struct str {};

str operator"" _X(long double d) {
    return str();
}

这与 g++ 4.7.2 Wall std=c++11 编译得很好

但现在如果我给双倍:

str operator"" _X(double d) {
    return str();
}

我收到以下错误消息: main.cpp|3|error: 'str operator""_X(double)' 的参数列表无效

有什么问题?这与“无法重新定义内置文字后缀的含义”(Stroustrup FAQ)有关吗? 你能想出一个解决方法吗?

最佳答案

What is the problem?

问题是标准禁止它。根据 C++11 标准关于用户定义文字的第 13.5.8./3 段:

The declaration of a literal operator shall have a parameter-declaration-clause equivalent to one of the following:

const char*
unsigned long long int
long double
char
wchar_t
char16_t
char32_t
const char*, std::size_t
const wchar_t*, std::size_t
const char16_t*, std::size_t
const char32_t*, std::size_t

关于解决方法,我不确定它是否需要,因为以下工作正常(double 被隐式转换为 long double,因此您可以传入double):

类型的文字
struct str {};

str operator"" _X(long double d) {
    return str();
}

int main()
{
    str s = 4.0_X;
}

关于C++11 运算符""带双参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16596864/

相关文章:

c++ - 类中的typedef

c++ - boost::uint32_t != std::uint32_t 对于 ARM 目标

c++ - 将 uint64_t 转换为 time_point

c++ - Mac 和 Linux 上 C++11 异步行为的差异

c++ - 为什么这种与零的比较不能正常工作?

python - 判断对象是否为 typing.Literal 类型

c++ - 类构造函数后的一对括号有什么作用?

c++ - 如何使用 AWS CPP SDK 检查 AWS S3 key 是否存在?

c++ - C++中字符串文字的数据类型是什么?

java - 我们可以调用 java 代码 "literals"之外的号码吗?