在 C++ 中作为函数参数传递时的增量运算符行为
在 C++ 中,自增运算符用于将变量的值加 1。符号 ++ 用于表示自增运算符。有两种类型的增量运算符:
- 预增量运算符:这种形式的增量运算符在将变量的值分配给变量之前将其值增加 1。
- 后增量运算符:这种形式的增量运算符在分配变量后将变量的值增加 1。
示例:
C++
// C++ program to show the pre and
// post increment operators
#include
using namespace std;
void fun(int x, int y, int z)
{
// values in x, y, z wll
// be printed.
cout << x << " " << y <<
" " << z;
}
// Driver code
int main()
{
// declaring and defining
// variable
// i with value 2.
int i = 2;
// Calling function fun
// with 3 parameters,
// demonstrating
// pre-increment.
// function called
fun(++i, ++i, ++i);
return 0;
}
C++
// C++ program to implement the pre
// and post-increment operators
#include
using namespace std;
// Function with three
// parameters x, y and z
void fun(int x, int y, int z)
{
// Print the value of the
// parameters
cout << x << " " << y << " " << z;
}
// Driver code
int main()
{
// declaring and defining
// variable i with value 5.
int i = 5;
// Function fun is called
// with both pre-increment
// and post-increment
// operators
fun(i++, i++, ++i);
return 0;
}
输出
5 5 5
一定想知道输出可以是 3、4、5 或 5、4、3 或任何组合。但输出是 5 5 5。但它是增量运算符的性质或行为。存储变量 i的值的源位置或内存是恒定的,并且每个增量运算符仅在此处增加值。再举一个例子就清楚了。让我们再看一个程序。
下面是实现前置和后置自增运算符的 C++ 程序。
C++
// C++ program to implement the pre
// and post-increment operators
#include
using namespace std;
// Function with three
// parameters x, y and z
void fun(int x, int y, int z)
{
// Print the value of the
// parameters
cout << x << " " << y << " " << z;
}
// Driver code
int main()
{
// declaring and defining
// variable i with value 5.
int i = 5;
// Function fun is called
// with both pre-increment
// and post-increment
// operators
fun(i++, i++, ++i);
return 0;
}
输出
7 6 8
这里的输出也不同。奇怪,不是吗? C++ 标准没有说明参数评估的顺序。因此可以根据编译器行为对其进行评估。
根据前面示例中解释的概念,您一定想知道输出应该是 6 7 8。
如果有人想根据后增量的概念,先使用该值,然后再递增。所以第一个参数中的值应该是 5。但答案是否定的。回忆内存和源位置的原理,然后应用后增量和前增量概念。尝试将这两个概念应用于 fun(++i, i++, ++i) 之类的测试用例,并尝试预测各种测试用例的输出,然后它肯定对您有意义,但发生的顺序可能因 C++ 而异标准。