c++ - std::numeric_limits<int>::has_infinity + 条件三元运算符

标签 c++ c++11 c++14

我只是在 std::numeric_limits 上做了一些尝试。并观察到一些有趣的行为。

cout << "Min = " << (std::numeric_limits<int>::has_infinity) ? "TRUE" : "FALSE";

输出0

cout << "Min = " << (std::numeric_limits<int>::has_infinity ? "TRUE" : "FALSE");

输出FALSE

请注意 std::numeric_limits 开始和结束 () 大括号的位置

在第一种情况下,三元运算符没有任何意义。当我将大括号移到末尾时,只有三元运算符 (?:) 被发现是有意义的。

关于为什么会出现这种行为的任何意见?

最佳答案

这是precedence of the << operator .您的第一个表达式等效于:

(cout << "Min = " << (std::numeric_limits::has_infinity)) ? "TRUE" : "FALSE";

关于c++ - std::numeric_limits<int>::has_infinity + 条件三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36347062/

相关文章:

c++ - 我应该如何编写函数参数来执行 move 而不是复制?

c++ - unordered_map::clear() 释放c++中元素占用的内存?

c++ - 将成员元组传递给非成员结构而不在模板中指定它

c++ - 为什么没有为 C++14 数字分隔符选择空格字符?

c++ - 在扩展期间将 vector 成员插入 vector : vector. push_back(vector[0])

c++ - 删除链表中的底部和顶部节点

c++ - 将 C++ 模板类型 T 修改为 "long T"?

java - 如何将加密数据从 C++ 传输到 Java

c++ - 在 Mac OS 上使用 OpenMP 和 C++11

c++ - 如何有条件地在具有相同签名的两个构造函数之间切换?