我对逗号运算符很困惑。我从来没有见过这样的代码和这样的语法?但我很好奇它在任何地方都有用吗?为什么它在 c++20 中被弃用?
#include <iostream>
int main()
{
int a[5]{1,2,3,45,5};
std::cout << a[(2,3)] <<'\n'; // this is work , in c++17 works
std::cout << a[2,3] << '\n'; // but this is deprecated in c++20 ,in c++17 works
return 0;
}
认识到作为表达式运算符的逗号和作为某种语法术语之间的分隔符的逗号之间的区别非常重要。他们使用相同的标点符号,但并不相同meaning.
内{}
在花括号初始化列表中,各个术语用逗号分隔。所以{1,2,3,45,5}
是一个术语序列。这是一个逗号作为分隔符。
但是,在一般表达式中,逗号充当表达式运算符。当逗号是两个表达式项之间的表达式运算符时,表示先计算左侧表达式,丢弃其结果,然后计算右侧表达式,即总表达式的结果。
在一个[]
, 逗号是notC++17 中的分隔符。因此,它充当表达式运算符。a[2,3]
意味着评估 2,丢弃它,然后评估 3。因此使用的索引将为 3。
C++20 不推荐使用逗号表达式作为直接表达式[]
。这样做是为了使 C++ 标准的未来版本可以自由地在其中添加逗号[]
变成逗号分隔符而不是逗号运算符。那是,[2, 3]
将 2 和 3 作为调用重载函数的参数operator[]
.
这类似于函数参数使用分隔符逗号的方式。因此,如果您需要在函数调用中的两个表达式上使用运算符逗号,则必须将它们包装在()
: func(1, (2, 3))
。该函数采用两个参数,第二个参数是对其项应用逗号运算符的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)