需要解释 叮当 AST 查看器 从我的例子



我尝试使用x86-64 clang 10.0.0 Ast 查看器打印以下代码的 AST

int main() {return  'c';}

我得到了这个:

TranslationUnitDecl
`-FunctionDecl <line:1:1, col:25> col:5 main 'int ()'
`-CompoundStmt <col:12, col:25>
`-ReturnStmt <col:13, col:21>
`-ImplicitCastExpr <col:21> 'int' <IntegralCast>
`-CharacterLiteral <col:21> 'char' 99

现在,在此之后,我尝试将返回字符"c"更改为"cw",我得到:

int main() {return  'cw';}

我得到了这个:

TranslationUnitDecl
`-FunctionDecl <line:1:1, col:26> col:5 main 'int ()'
`-CompoundStmt <col:12, col:26>
`-ReturnStmt <col:13, col:21>
`-CharacterLiteral <col:21> 'int' 25463

现在,为什么 -ImplicitCastExpr 消失了,即使从 ('char' 99( 它现在变成了 ('int' 25463(。我需要解释,谢谢。

根据 cpp-reference (https://en.cppreference.com/w/cpp/language/character_literal(:

窄字符文字或

普通字符文字,例如"a"或""或"\13"。这样的文字有类型字符。

关于多字符文字:

多字符文本,例如"AB",具有 int 类型和实现定义的值。

因此,对于您的第一个示例,您有一个窄字符文字"c",它隐式转换为 int,因为 main 的返回类型是 int。另一方面,多字符文字"cw"已经被视为 int,因此它不需要隐式强制转换。

请注意,这是针对C++的。在 C 中,两者(窄字符文本和多字符文本(都是 int 类型。

相关内容

  • 没有找到相关文章

最新更新