12人参与 • 2025-03-04 • C/C++
value--
(后缀递减):先使用值,再减1--value
(前缀递减):先减1,再使用值value++
(后缀递增):先使用值,再减1++value
(前缀递增):先加1,再使用值下面有这样一个问题,请先看代码:
#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 函数
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论