C++98调用自定义字面量报浮点常量后缀无效是什么原因?
结论
该报错和1.0的类型没有任何关系,核心原因是你使用了C++98标准不支持的语法特性。
原因说明
- 用户自定义字面量(User-defined Literals)是C11版本才正式纳入C标准的语法特性,更早的C98、C03标准中完全没有相关语法定义,因此在C++98编译模式下,编译器会直接把
_frac识别为非法的浮点数字面量后缀,和你运算符的入参类型、字面量的默认类型都没有关系。 - 如果你要使用自定义字面量功能,只需要将编译标准切换到C11及以上版本即可:GCC/Clang 编译时添加
-std=c++11或更高版本的标准参数,Visual Studio 可以在项目属性中修改C语言标准为C++11及以上。切换标准后你现有的代码不需要做任何修改就可以正常编译。 - 额外解答你原本的疑问:对于支持C++11及以上标准的编译器,不带后缀的浮点字面量(如
1.0,默认类型为double)会优先匹配入参为long double的自定义字面量运算符,你的运算符定义不存在参数匹配问题。
内容的提问来源于stack exchange,提问作者KhiemGOM
相关产品推荐
相关产品推荐

