我们假设我有一个命名空间strings.xml
,并且在其中声明了一个类<string name="encouraging_comment">
Les %1$s sont compliqué%2$ss...
</string>
,该类的构造函数继承了带有其构造函数的类<string name="encouraging_comment">
%1$s are complicated...
</string>
和其他类{{1 }}和公开可用的方法Foo
:
Bar
现在,我要在实现中定义Base
构造函数,如下所示:
Baz
似乎可以这样写下来了:
boo()
意味着一旦我在namespace Foo {
class Baz {
public:
void boo();
};
class Base {
public:
Base();
};
class Bar: public Base {
public:
Bar();
};
}
中明确指定了名称空间,就无需在此方法的定义中稍后指定它。
从显式提及名称空间到定义的末尾,它在任何地方都一样工作吗?
答案 0 :(得分:3)
如果我们查看您的Bar
构造函数定义:
Foo::Bar::Bar(): Base() {
Baz::boo();
}
一旦编译器读取了构造函数(Foo:::Bar::Bar
)的声明部分,它就会知道作用域,并且不再需要它。
一个更有趣的例子是
namespace Foo
{
struct Baz {};
struct Bar
{
Baz fun(Baz);
};
}
Foo::Baz Foo::Bar::fun(Baz)
{
// Irrelevant...
}
现在,对于结构本身的定义,Baz
不需要任何名称空间限定符,因为它是在名称空间中定义的,并且名称空间的所有符号都可以直接使用。
函数fun
的定义是不同的。因为它不是在名称空间中定义的,所以我们需要对返回类型完全限定Baz
结构。与实际函数名称相同。但是然后就像以前编译器读取并解析该部分一样,它知道范围并且知道参数Baz
实际上是Foo::Baz
。