演员和命名空间操作符之间没有空格?

Pod*_*Pod 2 c++ namespaces

任何人都可以解释以下代码行,可在http://docs.openttd.org/ai__cargo_8cpp_source.html找到

return (AICargo::TownEffect)::CargoSpec::Get(cargo_type)->town_effect;
Run Code Online (Sandbox Code Playgroud)

如果这条线是:

return (AICargo::TownEffect) ::CargoSpec::Get(cargo_type)->town_effect;
Run Code Online (Sandbox Code Playgroud)

(注意之间的空间TownEffect)::),那么我会罚款的理解.但是该文档*中没有空格,这意味着(AICargo::TownEffect)是::运算符的左操作数.

这段代码如何工作/编译?或者由于一些模糊的C++规则,这两件事情是否相等?

*在cpp文件中也是如此.

CB *_*ley 8

除了分离令牌之外,C++语法中的空格通常不重要.

括号很重要,它们不能出现在qualified-id中,因此不存在等价:

(AICargo::TownEffect)::CargoSpec::Get
Run Code Online (Sandbox Code Playgroud)

AICargo::TownEffect::CargoSpec::Get
Run Code Online (Sandbox Code Playgroud)

在第一个中有两个qualified-id,一个在括号中命名一个类型,另一个命名一个函数.在此上下文中对括号类型的唯一有效解释是作为强制转换表达式.在右括号后是否有空格没有区别.