++i在C、C++中是不是左值?

转载 2015年07月08日 18:34:13

前些天写blog左值与右值(C++学习)时,已经确认在C++中,++i 是左值。可是,今天在newsmth的C语言版上看到一个相关的问题。发现在C语言中,++i不是左值。

例子

一个很简单的例子:

int main()
{
    int i = 0;
    ++i = 5;
    return 0;
}

保存成 hello.c ,分别用 gcc、clang、cl、cc编译

  • gcc 4.5

hello.c: In function ‘main’:
hello.c:4:5: error: lvalue required as left operand of assignment
  • clang 2.8

hello.c:4:9: error: expression is not assignable
    ++a = 5;
    ~~~ ^
1 error generated.
  • cl (visual studio 2010)

用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 16.00.30319.01 版
版权所有(C) Microsoft Corporation。保留所有权利。

hello.c
hello.c(4) : error C2106: “=”: 左操作数必须为左值
  • cc (sun studio 11)

"hello.c", line 4: left operand must be modifiable lvalue: op "="
cc: acomp failed for hello.c

如果将文件保存为 hello.cpp,分别用 g++、clang、cl、CC编译。却则没有任何错误。

C++标准

++i 在C++中是左值,对此 C++标准(5.3.2)中有明文规定

  • The operand of prefix ++ is modified by adding 1, or set to true if it is bool (this use is deprecated). The operand shall be a modifiable lvalue. The type of the operand shall be an arithmetic type or a pointer to a completely-defined object type. The result is the updated operand; it is an lvalue, and it is a bit-field if the operand is a bit-field. If x is not of type bool, the expression ++x is equivalent to x+=1

C 标准

这个,翻了下C99和C1x,没发现明确的条文。

或者我错过了什么重要的东西?抑或犯了很低级的错误? ......


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

c/c++性能优化--I/O优化(上)

这节本想直接介绍I/O优化的,后来思考一下有必要对常用的I/O操作函数的特点介绍一下,这样要好些。下面就先介绍和I/O有关的库函数(以C99为准) 不同的操作系统有不同的文件管理方式,现行的主要有FA...

Which variables should I typecast when doing math operations in C/C++?

原帖: http://stackoverflow.com/questions/245740/which-variables-should-i-typecast-when-doing-math-oper...

LeetCode 之 Search in Rotated Sorted Array I II — C/C++ 实现

Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you befo...

C/C++异常处理机制-I

该博客旨在分享IT技术心得和实际工作中遇到问题的解决方法,以下是新浪博客地址http://blog.sina.com.cn/qianyumolu,则为分享经济、行业趋势、心灵文章等,有兴趣的朋友可以踩...
  • lupopo
  • lupopo
  • 2014年04月03日 08:47
  • 596

c/c++ ,gettext,软件的多语言支持(i18n)

一个小例程,用于演示: cat >hello.cpp

C/C++ I/O库函数

头文件:stdio.h 函数列表:   文件操作 remove 删除文件 rename 重命名文件 tmpfile ...

c/c++ I/O库函数

转自:http://blog.csdn.net/isgray/article/details/6838341 头文件:stdio.h 函数列表:   文件操作 ...

C/C++输入输出函数(I/O)总结

在c语言的学习使用过程中,除了格式化输入输出外,还有很多输入输出函数,包括字符串输入输出、文件输入输出等。在使用的过程中一直没有认真总结过,在这里把以前学的好好总结一下,以便时间长了又忘记了。...

windows via c/C++设备IO之接收I/O请求完成通知

本文章转载于http://www.cnblogs.com/wz19860913/archive/2008/08/20/1272257.html,感谢原作者辛苦付出。 上一篇,讨论了如何发送I/O请求...

C/C++异常处理机制-I

C/C++异常处理机制-I 2010-12-07 17:23:44 分类: C/C++ 引言: Visual C++提供了对C语言、C++语言及MFC的支持,因而其涉及到的异...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:++i在C、C++中是不是左值?
举报原因:
原因补充:

(最多只允许输入30个字)