这是否符合C++标准:双响双响,例如!!(-0.0).
Is this C++ standard compliant : double bang on double e.g. !!(-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
,如果结果false
,false
结果true
,则产生true
。第二!
则相反。!!
(解析为两个!
运算符,因为没有!!
标记(实际上将其操作数规范化为bool
,如果表达式不为零,则产生true
,如果表达式为零,则false
产生。
但在我看来,你的函数会更清楚地写成:
bool isNonZero(double val) {
return val != 0;
}
相关文章:
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- 不同版本的编译器(例如GCC)是否会产生不同的性能?
- 检查两个数组是否相等?? 例如:{1,2,3,4,5} == {4,5,3,2,1}
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?
- 是否可以直接将QString输入(例如)googletest的ADD_FAILURE()宏?
- 如何检测是否例如.T::is_transparent 是定义的?
- 如何检查字符串中是否有重复的负号?例如 --1
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 是否可以将"inf"分配给变量,例如 c++ 中的常规数值
- 当可以返回错误/异常时,从库中终止调用程序(例如,调用exit())是否总是错误的?
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- Rust 在索引时是否隐式创建映射条目,例如C++
- 模块名称是否驻留在单独的"name space"中,或者它们可能与例如变量名称发生冲突?
- Qt是否能够支持小缓冲区低延迟视频应用(例如实时流)
- Golang操纵函数中是否有一些方法,例如std :: bind在C 中
- 是否可以将指针传递给运算符,作为一个参数,例如指向函数的指针
- Python 3中是否有内置功能,例如C 中的GetChar()
- 在标准布局对象中进行指针运算(例如,使用偏移量)时,我们是否需要使用 std::launder?