在讨论
Type(identifier);
语法及其声明方式时,我遇到了 Type(::x);
在 Clang 中无法工作的情况。我期望对于一个全局变量 x
,它会将 ::x
视为表达式(::x + 2
是可以工作的),并将 ::x
强制转换为 Type
。但实际上,它输出编译器错误信息。
这是一个 简短的示例:
int x;
int main() {
int(::x); //does not compile
int(::x + 2); //compiles
}
Clang 3.5 给出的编译器错误是:
错误:定义或重新声明的 'x' 不能命名全局作用域
然而,GCC 4.9.0 可以正常编译此代码。这段代码是否有效?
struct Foo {};
被用作类型,错误会发生变化 :) - chrisint(::x);
是一个声明。 - M.MFoo::x;
和Foo (::x);
给出不同的错误,其中Foo
是一个类。 - M.MFoo::x
的情况下,空格被移除并且它被视为限定符标识符。 - Shafik Yaghmour