gpt4 book ai didi

c++ - 下标运算符中的逗号运算符?

转载 作者:行者123 更新时间:2023-12-01 15:07:48 25 4
gpt4 key购买 nike

我对逗号运算符很困惑。我从来没有见过这样的语法这样的代码?但我很好奇它是否在任何地方有用?为什么它在 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++ 标准的 future 版本可以自由地在 [] 中使用逗号。成为逗号分隔符而不是逗号运算符。即,[2, 3]使 2 和 3 成为调用重载 operator[] 的参数.
这类似于函数的参数如何使用分隔符逗号。因此,如果您需要在函数调用中的两个表达式上使用运算符逗号,则必须将它们包装在 () 中。 :func(1, (2, 3)) .此函数采用两个参数,第二个参数是应用于其项的逗号运算符的结果。

关于c++ - 下标运算符中的逗号运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63000052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com