Sun*_*nik 5 c++ scope-resolution-operator
我有以下 C++ 代码片段:
inline std::vector<std::unique_ptr<xir::Tensor>> cloneTensorBuffer(
const std::vector<const xir::Tensor*>& tensors)
{
auto ret = std::vector<std::unique_ptr<xir::Tensor>>{};
auto type = +::DataType::XINT;
ret.reserve(tensors.size());
for (const auto& tensor : tensors) {
ret.push_back(std::unique_ptr<xir::Tensor>(xir::Tensor::create(
tensor->get_name(), tensor->get_shape(), xir::DataType{type, 8u})));
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我对这个说法不太清楚:
auto type = +::DataType::XINT;
Run Code Online (Sandbox Code Playgroud)
+后面的::(范围解析运算符)是什么意思?
该组合没有特殊意义。+是常规前缀运算符。在这种特殊情况下,它\xe2\x80\x99s可能是多余的,或者执行强制到int. 但是,实际含义可能会有所不同,具体取决于 .xe2\x80\x99 类型的重载方式::DataType::XINT。
并且::是常规范围解析运算符。当在子表达式的开头使用时(即没有左侧操作数),它会导致在顶部范围DataType执行查找,即它忽略嵌套范围中的任何遮蔽重新定义:
int x = 1;\n\nvoid f() {\n int x = 2;\n std::cout << "inner = " << x << "\\n"; // inner = 2\n std::cout << "outer = " << ::x << "\\n"; // outer = 1\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |