use*_*370 9 c++ namespaces operator-overloading scope-resolution
在下面的C++代码中,foobar首先为单个double参数定义,然后再为单个参数类型定义Foo.两者都在全局命名空间中定义.
在one命名空间内foobar,使用单个参数类型定义了进一步的重载Bar.从这个版本中foobar,一个不合格的调用foobar与double参数(42.0)将失败.类似的调用foobar,这次使用(::)范围解析运算符限定,也使用double参数,但是会成功.
另一方面,foobar带有类型参数的非限定调用Foo成功.使用范围解析运算符限定foobar的Foo参数调用也会成功.
为什么这两种情况的表现不同?我同时使用gcc 4.7和clang ++ 3.2.
struct Foo {};
struct Bar {};
double foobar(double x) { return x; }
Foo foobar(Foo f) { return f; }
namespace one {
Bar foobar(Bar b) {
//foobar(42.0); // error: can't convert to Bar
::foobar(42.0);
Foo f;
foobar(f); // no problem
::foobar(f);
return b;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |