C++17中(j,0)是什么结构?为何可赋值给float?
C++17逗号表达式相关疑问解答
代码示例
#include <iostream> using std::cout, std::endl, std::flush, std::ostream; int main(){ unsigned long int j = 4; float k = (j,0); cout << " j = " << j << endl; cout << "(j,0) = " << (j,0) << endl; cout << " k = " << k << endl; }
运行结果
j = 4 (j,0) = 0 k = 0
疑问解答
问题1:
(j,0)这个结构的名称是什么?
这是逗号表达式,属于C/C++的内置运算符,优先级是所有运算符里最低的。问题2:为何该结构的求值结果为0.0f?
逗号表达式的求值规则是:从左到右依次计算每个子表达式,前面所有子表达式的结果会被直接丢弃,最终返回最后一个子表达式的值。这里先计算j(值为4,但结果被丢弃),再计算0,所以整个表达式的结果就是0;赋值给float变量k时,整数0会被隐式转换为float类型的0.0f。问题3:为何在C++17中允许将
(j,0)赋值给float类型?
C++标准允许整数类型到浮点类型的隐式转换,编译器会自动完成这个转换过程,属于合法的类型转换逻辑,因此不会触发编译错误。
内容的提问来源于stack exchange,提问作者James Watson
相关产品推荐
相关产品推荐

