读书人

++ 单目运算符有关问题

发布时间: 2012-04-18 15:01:59 作者: rapoo

++ 单目运算符问题!
main()
{
int a = 1,b = 1,c = 1,d = 1;

(++a)++ ;
++(++c) ;
(b++)++ ;
++(d++) ;
}

vc下编译出错:
: error C2105: '++ ' needs l-value
: error C2105: '++ ' needs l-value
: error C2105: '++ ' needs l-value
: error C2105: '++ ' needs l-value
缺少左值??????

但是我们老师说能通过???

能不能解释一下++到底怎么回事?
谢谢

[解决办法]
1.你用的vs是什么版本的?

2.我觉得前两个++的语句是正确的。

3.后两个,因为使用了后缀形式的++,所以是错误的。

4.前缀和后缀的operator ++ 有所不同,大致如下:

T & T::operator++() { // 这个是前缀的
// 这里实现 *this 增加 1 的概念
return *this;
}

const T T::operator++(int) { // 这个是后缀的
T t = *this;
// 这里实现 t 的增加 1 概念
return t; // 你看这里是一个临时变量
}

根据第二个方法可以看出,如果后缀方式多次加加,第二次开始作用不到最初的对象身上了,所以干脆禁止连续的++,使用const T作为返回类型。
[解决办法]
VC2003,VC7.1,前两个通过,后两个报错:++需要l值。

读书人网 >C语言

热点推荐