C++中返回引用的函数 i++与++i的区别是什么?
#include<iostream>intmain(){usingnamespacestd;intTestVar=0;cout<<(++RefFun(TestVar))<...
#include <iostream>
int main()
{
using namespace std;
int TestVar = 0;
cout << (++RefFun(TestVar)) << '\n';
cout << TestVar << '\n';
getchar();
}
int &RefFun(int &SomeVar)
{
return ++SomeVar;
}
这段代码这样写是正确的,最终输出的结果为“2 回车 2”
可是如果我把函数体中的++SomeVar换成SomeVar++的表达方式就会出现编译错误。提示:”非常量引用的初始值必须为左值“。
自增运算符为后缀时不是说先返回变量值再将变量自增吗? 变量是一个左值啊,为什么会提示这个错误。 展开
int main()
{
using namespace std;
int TestVar = 0;
cout << (++RefFun(TestVar)) << '\n';
cout << TestVar << '\n';
getchar();
}
int &RefFun(int &SomeVar)
{
return ++SomeVar;
}
这段代码这样写是正确的,最终输出的结果为“2 回车 2”
可是如果我把函数体中的++SomeVar换成SomeVar++的表达方式就会出现编译错误。提示:”非常量引用的初始值必须为左值“。
自增运算符为后缀时不是说先返回变量值再将变量自增吗? 变量是一个左值啊,为什么会提示这个错误。 展开
1个回答
展开全部
后自增返回的是右值
右值不能作为引用返回,也不能进行build-in类型的右值也不能做前自增
如果把int外面包一层class,就可以了
#include <iostream>
using namespace std;
class c {
int num;
public:
c(int n = 0) : num(n) {
}
c operator++(int) {
c temp(num);
num++;
return temp;
}
c& operator++() {
num++;
return *this;
}
friend ostream& operator<<(ostream& out, const c& a) {
out << a.num << endl;
return out;
}
};
c &RefFun(c &SomeVar)
{
return SomeVar++; // 这样就不会报错,但是运行结果是undefined
}
int main()
{
c TestVar(0);
cout << (++RefFun(TestVar)) << '\n';
cout << TestVar << '\n';
getchar();
}
如果是后自增的版本,就只能返回值而不是引用了
c RefFun(c &SomeVar) // 返回c 而不是 c&
{
return SomeVar++;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询