我有以下 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;
}
我不清楚宣告:
auto type = ::DataType::XINT;
后跟::(范圍決議運算子)是什么意思?
uj5u.com熱心網友回復:
該組合沒有特殊含義。 是常規前綴運算子。在這種特殊情況下,它可能是多余的,或者對int. 但是,實際含義可能會有所不同,具體取決于::DataType::XINT.
并且::是常規范圍決議運算子。當在子運算式的開頭使用時(即沒有左運算元),它會導致在頂部范圍執行查找,即它忽略DataType嵌套范圍內的任何陰影重新定義:
int x = 1;
void f() {
int x = 2;
std::cout << "inner = " << x << "\n"; // inner = 2
std::cout << "outer = " << ::x << "\n"; // outer = 1
}
uj5u.com熱心網友回復:
沒有 ::。它是一元運算 符和::運算子。
::foofoo在全域命名空間中參考。DataTye::XINT當當前名稱空間中有另一個名稱空間時,它可能是必要的。
一元 有時用于觸發隱式轉換。您需要檢查::DataType::XINT它是什么型別以及它有哪些可用的轉換。
因為我不知道是什么::DataType::XINT,這里有一個 lambda 運算式的例子:
template <typename T>
void foo();
int main() {
auto x = [](){};
foo(x);
foo( x);
}
錯誤訊息(縮短)是:
<source>:6:8: error: no matching function for call to 'foo(main()::<lambda()>&)'
6 | foo(x);
<source>:7:8: error: no matching function for call to 'foo(void (*)())'
7 | foo( x);
| ~~~^~~~
您可以看到foo(x)嘗試foo使用 lambda 呼叫,而在foo( x)lambda 中被隱式轉換為函式指標(因為函式指標可用ClosureType::operator ret(*)(params)()且 可用于函式指標,但不適用于 lambdas 型別)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/413472.html
標籤:
