这是否符合C++标准:双响双响,例如!!(-0.0).

Is this C++ standard compliant : double bang on double e.g. !!(-0.0)

本文关键字:是否 例如 标准 C++      更新时间:2023-10-16

以下行是否符合标准!!(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,如果结果falsefalse结果true,则产生true。第二!则相反。!!(解析为两个!运算符,因为没有!!标记(实际上将其操作数规范化为bool,如果表达式不为零,则产生true,如果表达式为零,则false产生。

但在我看来,你的函数会更清楚地写成:

bool isNonZero(double val) {
return val != 0;
}
相关文章: