簡體   English   中英

Class 模板具有指針 arguments 與默認值

[英]Class template having pointers arguments with default value

我試圖理解下面的代碼片段

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 *();

這是 C++ 的復雜語法和文法如何產生意外結果的示例:

int *();

您的 C++ 編譯器很想將此構造解釋為“返回指向int的指針的函數”。 您的 C++ 編譯器屈服於這種誘惑,並觀察到了結果。

你需要教你的 C++ 編譯器你想在這里完成什么:

typedef int *intp;

int main()
{
    int * var = intp();
}

假設您有x=1+2 您會期望x*3 (即 9)等於1+2*3 (即 7)嗎?

這里也發生了類似的問題。 int*()T=int* then T()不同。

試試(int*){} ,它解決了組合解析和預測問題。 using T=int*; int* x=T(); using T=int*; int* x=T(); ,甚至int*x={}; .

當您使用如下表達式時:

T var = T();

其中T是指針類型,則var將被分配nullptr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM