以下用户定义的文字省略了错误:
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/