Может кто-нибудь, пожалуйста, объясните следующую строку кода, найденного на http://docs.openttd.org/ai__cargo_8cpp_source.htmlНет пробелов между оператором трансляции и оператором пространства имен?
return (AICargo::TownEffect)::CargoSpec::Get(cargo_type)->town_effect;
Если эта строка была:
return (AICargo::TownEffect) ::CargoSpec::Get(cargo_type)->town_effect;
(обратите внимание на пробел между TownEffect)
и ::
), то я бы понял это нормально , Однако в этом документе нет пробелов *, что означает, что (AICargo::TownEffect)
является левым операндом оператора ::.
Как этот код работает/компилируется? Или две вещи эквивалентны из-за какого-то неясного правила C++?
* Это то же самое в файле cpp.
Технически, «AICargo :: TownEffect» является _type-id_, а не _qualified-id_, потому что он называет тип, а не объект или функцию. –