c++ - 这是否符合 C++ 标准:双重标准例如 !!(-0.0)
问题描述
是否符合以下线路!!(val)
标准。即这是否可移植到其他编译器和硬件?
我已经用 gcc & clang 编译器对此进行了测试,它适用于多个版本。但是能保证合规吗?
#include<iostream>
bool isNonZero(double val) {
return !!(val);
}
int main()
{
std::cout << std::boolalpha << isNonZero(-0.0) << std::endl;
std::cout << std::boolalpha << isNonZero(0.0) << std::endl;
std::cout << std::boolalpha << isNonZero(1.001) << std::endl;
std::cout << std::boolalpha << isNonZero(-1.001) << std::endl;
return 0;
}
解决方案
是的,它是便携式的。
运算符的!
操作数在上下文中转换为,如果结果是,则bool
它产生,如果结果是。第二个相反。(它被解析为两个运算符,因为没有标记)实际上将其操作数归一化为,如果表达式非零,则产生,如果它为零。true
false
false
true
!
!!
!
!!
bool
true
false
但在我看来,你的功能会更清楚地写成:
bool isNonZero(double val) {
return val != 0;
}
推荐阅读
- hive - HBase 存储处理程序:UnknownProtocolException:未找到名称 AuthenticationService hbase:meta 的协处理器
- groff - 在命令行禁用 groff 断字
- javascript - 在 JavaScript 中解析 Promise
- plsql - Oracle APEX 在 PL/SQL 中调用 Dialogflow V2 - 使用 OAuth2 或 Google 服务帐户进行身份验证
- python - 使用 FiPy 围绕球体流动的斯托克斯边界条件
- python-3.x - 在 Python 中将所有输出行导出为 CSV,而不仅仅是最后一行
- mysql - MySQL LEFT JOIN 使用 OR 非常慢
- momentjs - 当我格式化时,时刻 js 显示错误的时间
- formula - 如何根据经纬度计算偏移量
- python - 父类 self.__class__.__name__ 打印子类的名称