ITC 的所有操作数的三元运算符开销

问题描述 投票:0回答:0

我无法帮助自己,但很难理解为什么即使控制条件的计算结果为真,三元条件的第三个操作数(假条件表达式)也会进行隐式类型转换,反之亦然?

我可能只能推断 C 语言标准规范要求操作数是“兼容的”(我到处都听到过这个术语,但我不确定它有多准确),就像在任何表达式中一样,编译器确保它们是。但是为什么这个限制放在第一位呢?三元与其他运算符不同,它可以自由地忽略不会被计算的表达式。 对于其他操作,很明显操作数应该是同一类型才能使特定操作按预期工作。

只有在编译时发生隐式类型转换才有意义, 老实说,我什至不知道它什么时候发生。出于某种原因,我找不到这个问题的合理答案,但我确实找到了this文章。这篇文章对我来说没有任何意义,尤其是这一行:

C语言中的隐式类型转换是一个数据的转换 在执行期间由编译器键入另一种数据类型 程序。

是通过编译器,还是在程序执行过程中? 我可能是一个容易混淆的人,但据我所知,编译器在程序执行期间没有任何作用。

所以,任何人都可以解释为什么 ITC 转换是必要的,因为对我来说这会产生不必要的开销。 这是一个概念验证:

#include <stdio.h>

int main (void)
{
    printf("%zu\n", sizeof( 0 ? 2.0 : 3 ));
   
    return 0;
}

结果是

8
.

  • 我还问了 ChatGPT ITC 什么时候发生,它是在运行时写的。我问它是否确定并验证该信息,毫不奇怪它改变了它的叙述。
c type-conversion implicit-conversion conditional-operator ternary
© www.soinside.com 2019 - 2024. All rights reserved.