在C中,一元加运算符称为一元算术运算符,可能不适用于指针(C标准,6.5.3.3一元算术运算符).
1一元+或 - 运算符的操作数应具有算术类型 ; 〜运算符,整数类型; 的!运算符,标量类型.
因此这个程序不会编译
#includeint main(void) { int a = 10; int *pa = &a; printf( "%d\n", *+pa ); return 0; }
但是在C++中,一元加运算符可以应用于指针(C++标准,5.3.1一元运算符)
7一元+运算符的操作数应具有算术,无范围枚举或指针类型,结果是参数的值.对整数或枚举操作数执行整体提升.结果的类型是提升的操作数的类型.
这个程序编译成功.
#includeint main() { int a = 10; int *pa = &a; std::cout << *+pa << std::endl; return 0; }
维持C和C++之间差异的原因是什么?
当我回答问题为什么int指针的大小与int数组的大小不同时,问题出现了?.我将展示如何将数组转换为sizeof
运算符中的指针.
起初我想写
sizeof( +array )
但是这个表达式在C中是无效的.所以我不得不写
sizeof( array + 0 )
我发现C和C++之间存在这样的差异.:)