[英]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.