我对逗号运算符很困惑。我从来没有见过这样的语法这样的代码?但我很好奇它是否在任何地方有用?为什么它在 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;
}
Run Code Online (Sandbox Code Playgroud)
重要的是要认识到逗号作为表达式运算符和逗号作为某种语法术语之间的分隔符之间的区别。它们使用相同的标点符号,但它们的含义不同。
在花{}括号初始化列表中,各个术语用逗号分隔。{1,2,3,45,5}术语序列也是如此。这是一个逗号作为分隔符。
但是,在一般表达式中,逗号充当表达式运算符。当逗号是两个表达式项之间的表达式运算符时,表示先计算左边的表达式,丢弃其结果,再计算右边的表达式,即总表达式的结果。
在 a 中[],逗号不是C++17 中的分隔符。因此,它充当表达式运算符。a[2,3]意味着评估 2,丢弃它,然后评估 3。所以使用的索引将是 3。
C++20 弃用逗号表达式作为[]. 这样做是为了让 C++ 标准的未来版本可以自由地将逗号[]变成逗号分隔符而不是逗号运算符。也就是说,[2, 3]使 2 和 3 成为调用重载的参数operator[]。
这类似于函数的参数如何使用分隔符逗号。因此,如果您需要在函数调用中的两个表达式上使用运算符逗号,则必须将它们包装在(): 中func(1, (2, 3))。此函数采用两个参数,第二个参数是应用于其项的逗号运算符的结果。
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |