C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > c++自增/自减操作

c++中的自增/自减操作方式

作者:_DCG_

这篇文章主要介绍了C++中的自增和自减运算符,包括前缀和后缀形式,并通过一个具体的例子解释了自增/自减表达式的值与函数参数传递的关系,文章指出,自增/自减表达式的值是在表达式求值时确定的,而不是在自增/自减运算后

基本概念

下面有这样一个问题,请先看代码:

#include <iostream>

void fun(int x) {
    std::cout << "Parameter value: " << x << std::endl;
}

// 后缀递减示例
void postfix_example() {
    int value = 2;
    fun(value--);  // 传入2,之后value变为1
    std::cout << "After call: " << value << std::endl;
    
    // 输出:
    // Parameter value: 2
    // After call: 1
}

// 前缀递减示例
void prefix_example() {
    int value = 2;
    fun(--value);  // 先将value减为1,然后传入1
    std::cout << "After call: " << value << std::endl;
    
    // 输出:
    // Parameter value: 1
    // After call: 1
}

看到的上面的代码,func内部会输出什么?整个的执行顺序是什么?

原理解析

要回答上面的问题,要首先要搞明白一件事:

以前面的例子说明:

如果代码写成下面的样子大家都能看懂:

void postfix_example() {
    int value = 2;
    value--;  //这里value变成了1,
    fun(value);  // 传入1
    std::cout << "After call: " << value << std::endl;
    
    // 输出:
    // Parameter value: 1
    // After call: 1
}

容易造成大家疑惑的地方就是:

如果自减/自减表达式作为函数参数,函数因为使用了这个表达式的值,而很多朋友对这个表达式的值具体是多少或者说传入函数的值是多少存在疑问。

现在在这里非常明确的告诉大家:

c++自增/自减表达式的值需要严格结合自增自减运算符的概念进行理解。

下面我举出下面的例子:

int value = 5;
std::cout<<value--<<std::end;  //输出5

int value = 5;
std::cout<<--value<<std::end;  //输出4


int value = 5;
std::cout<<value++<<std::end;  //输出5

int value = 5;
std::cout<<++value<<std::end;  //输出6

执行顺序

下面分析代码的执行顺序:

fun(value--);

这行代码的执行顺序是:

1.value-- 表达式被求值:

2.返回的临时值作为参数传递给 fun 函数

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文