在 VS 上玩过这段代码:
int a;
int b = !!!!!!!!!!!!!!!!!!!!!!!!!!a;
int c = ++++++++++++++++++++++++++a;
int d = --------------------------a;
这就是发生的事情——如果你编译为 C——那么它会写出 for++并且--需要一个左边的值。但是如果你编译为 C++,它编译没有错误。
我不明白其中的区别,请帮助我。
在 VS 上玩过这段代码:
int a;
int b = !!!!!!!!!!!!!!!!!!!!!!!!!!a;
int c = ++++++++++++++++++++++++++a;
int d = --------------------------a;
这就是发生的事情——如果你编译为 C——那么它会写出 for++并且--需要一个左边的值。但是如果你编译为 C++,它编译没有错误。
我不明白其中的区别,请帮助我。
在 C++ 中,前缀(一元)运算符 ++ 和 -- 的值是
lvalue,而在 C 中是rvalue,即不能更改的临时对象。还比较赋值运算符的例子。在 C++ 中你可以这样写
然而,在 C 中,这样的代码不会被执行,因为赋值运算符返回
rvalue。来自 C 标准(6.5.3.1 前缀递增和递减运算符)
V(6.5.16 赋值运算符)
来自C++标准(5.3.2自增自减)
至于逻辑非运算符,它适用于表达式,等价于表达式
e == 0来自 C 标准(6.5.3.3 一元算术运算符)
并且来自 C++ 标准(5.3.1 一元运算符)
在 C 程序中,双重否定应用于表达式的情况并不少见
这样做是为了使表达式的结果正好等于
0or1。