c++ - 为什么我必须对用户定义的文字使用 long double?

标签 c++ c++11 user-defined-literals

以下用户定义的文字省略了错误:

constexpr double operator "" _kg(double q)
{
   return q*1000;
}

但如果添加 long,错误将消失,代码将按如下方式工作:

constexpr double operator "" _kg(long double q)
{
   return q*1000;
}

错误是:

‘constexpr double operator""_kg(double)’ has invalid argument list

问题只是参数和返回类型可以是double而没有long

为什么需要long

最佳答案

C++11 草案 n3290 对用户定义的文字可以采用的参数有这样的说法(第 13.5.8 节):

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 在。因此,您必须将其用于期望 float 作为参数的用户定义文字。

关于c++ - 为什么我必须对用户定义的文字使用 long double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983869/

相关文章:

c++ - 不带下划线的用户定义文字

c++ - 二叉树(不是二叉搜索树)创建新节点和子节点

c++ - 如果 <iostream> 函数失败会怎样?

c++ - std::vector<const char *> 的赋值效果错误?

c++ - std::vector元素的初始化 move/复制构造函数

c++ - std::async 是如何实现的?

c++ - 不可预测的线程行为

c++ - gRPC - C++ 异步 HelloWorld 客户端示例不异步执行任何操作

c++ - C++11 的用户自定义字面量(扩展字面量)……哪些编译器支持?

c++ - VS2015 中的计时文字