++ 单目运算符问题!
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值。