在 C 中,您可以像这样进行类型转换:
double d = 1.008;
int i = (int)d;
Run Code Online (Sandbox Code Playgroud)
为什么括号是强制类型转换的?是因为优先顺序吗?C的创造者在这背后的思维过程和逻辑是什么?
我很好奇为什么编译器可以消除许多其他事情的歧义,但是通过类型转换,括号是强制执行的。
int main()
{
char c;
(int)c; // int c; if no parentheses were needed
}
Run Code Online (Sandbox Code Playgroud)
这是完全有效的 C。现在想象一下不需要括号,然后可以将强制转换解释为声明和强制转换。
让我们假装它们不是必需的。看这个:
int*d
Run Code Online (Sandbox Code Playgroud)
这是转换int,而单目运算符*适用于d,或者是这个转换int*?
这个怎么样:
unsigned int 4.2
Run Code Online (Sandbox Code Playgroud)
是将 4.2int转换为然后转换为unsigned吗?还是将 4.2 转换为unsigned int?
归根结底,如何解决歧义是一种设计选择。一种方法是应用“最大咀嚼”,另一种方法是指定所有歧义都是格式错误的,在这种情况下选择的方法是指定语法,以便没有歧义。
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |