我試圖理解下面的代碼片段
template <typename T>
class testopaque {
public:
void test(T var = T()) {}
};
使用指標型別示例呼叫時默認引數如何作業 int *
int main() {
testopaque<int *> obj1;
obj1.test();
}
呼叫 obj1.test() 時編譯器會生成什么。嘗試時出現編譯器錯誤
int main() {
int * var = int *();
}
error: expected primary-expression before ‘int’
int * ptr = int *();
uj5u.com熱心網友回復:
假設你有x=1 2. 你會期望x*39 等于1 2*37 嗎?
這里正在發生類似的問題。 int*()和T=int*then不一樣T()。
Try (int*){},它解決了組合決議和預測問題。或者using T=int*; int* x=T();,甚至int*x={};。
uj5u.com熱心網友回復:
這是 C 復雜的語法和語法如何產生意外結果的示例:
int *();
您的 C 編譯器很想將此構造解釋為“函式回傳指向int”的指標。您的 C 編譯器屈服于這種誘惑,并帶有觀察到的結果。
你需要教你的 C 編譯器你要在這里完成什么:
typedef int *intp;
int main()
{
int * var = intp();
}
uj5u.com熱心網友回復:
當您使用以下運算式時:
T var = T();
T指標型別在哪里,然后var將被分配nullptr
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399178.html
