在這方面int *
和map::iterator
之間沒有區別。您正在使用的周圍語義結構與int *
和map::iterator
有所不同,這就是爲什麼一個編譯和其他編譯沒有。
隨着if
你有一個選擇,要麼
if (declaration)
或
if (expression)
宣言不表達。您不能在更大的表達式中使用聲明作爲子表達式。您不能將聲明用作明確比較的一部分,這正是您嘗試執行的操作。
例如,如果你試圖做同樣的事情與int *
,這樣
if ((int* x = new int(123)) != NULL)
的代碼將無法編譯不能通過完全一樣的原因,你的map::iterator
代碼不編譯。
你必須使用
if (int* x = new int(123))
或
int* x = new int(123);
if (x != NULL)
或
int* x;
if ((x = new int(123)) != NULL)
正如你可以在上面看到,int *
展品完全相同的行爲map::iterator
。
在您的示例中,不可能聲明it
並在if
的條件下執行與props.end()
的比較。你將不得不使用上述一個變型相反,即要麼
map<string, Property>::iterator it = props.find(PROP_NAME);
if (it != props.end())
或
map<string, Property>::iterator it;
if ((it = props.find(PROP_NAME)) != props.end())
您可以選擇自己喜歡的更多。
P.S.當然,正式,你也可以寫
if (map<string, Property>::iterator it = props.find(PROP_NAME))
但它不會做你想要它做的事情(不比較迭代器價值props.end()
),並且可能不能編譯,因爲迭代器類型可能是不可兌換爲bool
。
來源
2013-07-12 21:31:22
AnT
請不要像這樣分配動態內存。如果發生異常,您可能會發現內存泄漏。要麼使用智能指針,要麼首先考慮一個簡單的'int'是否需要處於動態內存中。 –
呃...只是不。 –