Des*_*tor 3 c arrays pointers unary-operator
我知道C&C++都是不同的语言,今天我在下面的程序中做了一点点错误,但程序在各种C++编译器上编译得很好(g ++,clang,MSVC++)
考虑以下计划:
int main()
{
int s[]={3,6,9,12,18};
int* p=+s; // Observe this strange looking initialization due to use of unary + operator
}
Run Code Online (Sandbox Code Playgroud)
上述程序在编译C++罚款(见现场演示这里),但不是在C(见现场演示这里).我的编译器(gcc 4.8.1)给出了当我编译它作为一个C程序我下面的错误.
[Error] wrong type argument to unary plus
Run Code Online (Sandbox Code Playgroud)
一元加运算符在这里服务的目的是什么?它到底在做什么?为什么C不允许?
该部分C99的6.5.3.3规定:
1)一元+或 - 运算符的操作数应具有算术类型; ......
2)一元+运算符的结果是其(提升的)操作数的值.整数提升在操作数上执行,结果具有提升类型.
指针或数组不是算术类型.
一元加运算符在这里服务的目的是什么?
在C++中,行为在第5.3.1节中列出:
[2]以下每个一元运算符的结果都是prvalue.
[7]一元运算
+符的操作数应具有算术,无范围枚举或指针类型,结果是参数的值.
有时人们使用此运算符来"强制"衰减,即在这种情况下,数组指向指针.但它是相当多余的,因为转换是自动发生的.
它到底在做什么?为什么C不允许?
因为特殊的意义根本不存在.