我在google的protobuf生成的以下代码中发现了这种用法。
inline void Datum::set_data(const void* value, size_t size) {
set_has_data();
//over here.
if (data_ == &::google::protobuf::internal::kEmptyString) {
data_ = new ::std::string;
}
data_->assign(reinterpret_cast<const char*>(value), size);
}
谢谢: - )!
答案 0 :(得分:8)
这是两个完全无关的事情,也许更好地被认为是
&(::google::protobuf::internal::kEmptyString)
&
只表示地址运算符,与您完成的完全相同:
int xyzzy = 7;
int *pointer_to_xyzzy = &xyzzy;
另一方面,::
是全局命名空间说明符,以确保您不会开始查看当前命名空间。
例如,以下程序:
#include <iostream>
int x = 7;
namespace xyzzy {
int x = 42;
int getxa() { return ::x; }
int getxb() { return x; }
}
int main() {
std::cout << xyzzy::getxa() << '\n';
std::cout << xyzzy::getxb() << '\n';
return 0;
}
输出7
后跟42
,因为getxa()
函数使用全局命名空间说明符而不是xyzzy
。