因此,如果我理解得很好,整体推广提供:char, wchar_t, bool, enum, short类型总是被转换为int(或unsigned int).然后,如果表达式中有不同的类型,则将应用进一步的转换.
我理解得这么好吗?
如果是,那么我的问题是:它为什么好?为什么?不要变得char/wchar_t/bool/enum/short不必要吗?我的意思是例如:
char c1;
char c2;
c1 = c2;
Run Code Online (Sandbox Code Playgroud)
正如我之前所描述的,charALWAYS被转换为int,所以在这种情况下自动转换后,这看起来像这样:
int c1;
int c2;
c1 = c2;
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么这样好,如果我知道那种char类型足以满足我的需要.
1)为什么他们被称为"主要"?按照评价的顺序,他们是第一个?
2)C++ 03标准定义了第5章(注1)中的表达式:"表达式是指定计算的运算符和操作数的序列."
然后5.1"主表达式"定义主表达式列表:
(1)primary-expression:
文字
这个
(表达)
ID-表达
我的主要问题是关于第三点:
(表达)
因此,根据标准,带括号的每个表达式都是主表达式,首先计算它们.它看起来很合理,并且给出了C++表达式(优先级)中括号行为的精确解释.
所以这就是例如
(变量+10)
是一个主要的表达.
var =(变量+ 10)*3
根据我的理论,它看起来很合乎逻辑,但我知道其他来源
(变量+10)
不是主要表达,但为什么?我不明白,但标准定义了
(表达)
作为主要表达.
请帮帮我,因为我做不到.非常感谢,对不起我的英语不好.你好.
例如,具有C99标准的C编程语言支持十六进制浮点文字,但C++与C++ 03标准不支持.
我对它进行了测试,GCC在C++ 03模式下识别了十六进制浮动文字(-std = c ++ 03),但根据C++标准,它不应该.我知道,这不是一个悲剧,我只是对这个问题感兴趣..
GCC编制器是否符合标准?你能推荐我一个符合标准"完美"的C/C++编译器吗?
C标准6.5.3.2地址和间接运算符(3)表示:
"一元&运算符返回其操作数的地址.如果操作数的类型''类型'',结果的类型''指向类型''.如果操作数是一元*运算符的结果,那么运算符都不是也没有对&运算符进行求值,结果就好像两个都被省略了,除了对运算符的约束仍然适用,结果不是左值."
"83)因此,&*E等于E(即使E是空指针),&(E1 [E2])到((E1)+(E2)).如果E是a,则总是如此函数指示符或作为一元&运算符的有效操作数的左值,*&E是函数指示符或等于E的左值.如果*P是左值并且T是对象指针类型的名称,*(T) P是一个左值,其类型与T指向的类型相符."
所以,如果我理解得好,&*E就好像我们会删除一样&*.然而,
#include <cstdio>
#include <typeinfo>
int main()
{
float A[2];
printf( "name: %s\n", typeid( &*A ).name());
printf( "name: %s\n", typeid( A ).name());
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
会给:
name: Pf
name: A2_f
Run Code Online (Sandbox Code Playgroud)
所以他们不一样.
怎么了?我有什么误会?非常感谢你的帮助,谢谢.