++ 单目运算符问题!

Ronal_Lee 2007-04-17 10:38:21
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
缺少左值??????

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

能不能解释一下++到底怎么回事?
谢谢
...全文
358 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiveyes 2007-04-17
  • 打赏
  • 举报
回复
VC2003,VC7.1,前两个通过,后两个报错:++需要l值。
yutaooo 2007-04-17
  • 打赏
  • 举报
回复
vc6还是不要用了吧。那时候标准还没出来,vc6非标东西挺多的,2003,2005好多了。继续用下去你还不迷惑死啊,浪费时间感情啊!
Ronal_Lee 2007-04-17
  • 打赏
  • 举报
回复
我用的是vc6.0

我们老师也说
(++a)++ ;
++(++c) ;
以上两个表达式正确
后两个不正确。但是编译器把他们都报错了!
yutaooo 2007-04-17
  • 打赏
  • 举报
回复
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作为返回类型。
freshui 2007-04-17
  • 打赏
  • 举报
回复
(++a)++
不合法!
这个拆开就是
(a=a+1)++

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧