作为用于限定名称查找目的的已知范围解析运算符。但是返回的值是::
多少?据我了解,它是后缀一元运算符。考虑以下:
namespace A
{
//something
}
A:: //error: expected unqualified-id before ‘int’
int main(){ }
你能解释一下这种行为吗?
作为用于限定名称查找目的的已知范围解析运算符。但是返回的值是::
多少?据我了解,它是后缀一元运算符。考虑以下:
namespace A
{
//something
}
A:: //error: expected unqualified-id before ‘int’
int main(){ }
你能解释一下这种行为吗?
范围解析运算符::
只是一个语法运算符,没有其他语义。也就是说,有些运算符只对语言的语法有贡献,而其他运算符也对程序的语义/运行时行为有贡献,并且可以定制语义。那就是运算符重载。
据我所知(未重载)::
运算符的唯一含义是范围解析。您的代码被解释为A::int main()
产生错误的原因。
::
范围解析运算符仅用作...范围解析运算符。
具体而言,标准第 5.1.1/8 节规定的 C++ 语法是:
qualified-id:
nested-name-specifier template(opt) unqualified-id
nested-name-specifier:
::
type-name ::
namespace-name ::
decltype-specifier ::
nested-name-specifier identifier ::
nested-name-specifier templateopt simple-template-id ::
在您的情况下nested-name-specifier
,namespace-name ::
具体是A ::
. 对于 aqualified-id
你至少需要and unqualified-id
。
unqualified-id
根据§5.1.1,An具有以下语法:
unqualified-id:
identifier
operator-function-id
conversion-function-id
literal-operator-id
~ class-name
~ decltype-specifier template-id
范围解析运算符 :: 不是函数调用,它是在语言中构建的,编译器使用它来查找名称,它将返回在其右侧找到的类型。
标准摘录:
表示一个类的嵌套名称说明符,可选地后跟关键字模板(14.2),然后是该类(9.2)或其基类之一(第 10 条)的成员的名称,是合格的ID;3.4.3.1 描述了对出现在qualified-ids 中的类成员的名称查找。结果是成员。结果的类型是成员的类型。
在您的情况下,编译器正在查找 A::int 这显然不是您想要的。
一个简单的例子:
int count = 0;
int main(void) {
int count = 0;
::count = 1; // set global count to 1
count = 2; // set local count to 2
return 0;
}