我对逗号运算符非常困惑。我从未见过具有这种语法的代码吗?但我很好奇它在任何地方都有用吗?为什么在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;
}

最佳答案

重要的是要认识到逗号作为表达式运算符和逗号作为某种语法术语之间的分隔符。它们使用相同的标点符号,但含义不同。
在带有括号的初始列表的{}中,各个术语用逗号分隔。因此{1,2,3,45,5}是一系列术语。这是一个逗号分隔符。
但是,在一般表达式中,逗号充当表达式运算符。当逗号是两个表达式项之间的表达式运算符时,表示要评估左表达式,舍弃其结果,然后评估右表达式,这是总表达式的结果。
[]中,逗号不是C++ 17中的分隔符。因此,它充当表达式运算符。 a[2,3]的意思是求值2,丢弃它,然后求值3。因此,使用的索引为3。
C++ 20弃用逗号表达式作为[]中使用的直接表达式。这样做是为了使将来的C++标准版本可以自由地使[]中的逗号成为逗号分隔符而不是逗号运算符。也就是说,[2, 3]将2和3用作重载operator[]调用的参数。
这类似于函数的参数使用分隔符逗号的方式。因此,如果需要在函数调用中的两个表达式上使用运算符逗号,则必须将它们包装在():func(1, (2, 3))中。此函数有两个参数,第二个参数是将逗号运算符应用于其条件的结果。

10-08 08:54
查看更多