我可以在C++中聲明兩個變量嗎?編譯器給了一個錯誤,但還是我想我應該得到一個意見:在條件聲明兩個變量?
int main()
{
double d1 = 0;
if((double d2 = d1) || (double d3 = 10))
cout << "wow" << endl;
return 0;
}
我可以在C++中聲明兩個變量嗎?編譯器給了一個錯誤,但還是我想我應該得到一個意見:在條件聲明兩個變量?
int main()
{
double d1 = 0;
if((double d2 = d1) || (double d3 = 10))
cout << "wow" << endl;
return 0;
}
你只能做到這一點對一個變量
if(double d2 = d1)
cout << "wow" << endl;
else
if(double d3 = 10)
cout << "wow" << endl;
,但我會宣佈他們的條件之外。如果你害怕有關的範圍,你總是可以限制它:
{
double d2 = d1;
double d3 = 10;
if(d2 || d3)
cout << "wow" << endl;
}
當然,這個評估即使d2
計算結果爲true第二初始化。但我認爲這並不重要。
這是不可能在C++中,也許你正在考慮的C#或較新的編程語言。在條件之外聲明d2和d3沒有任何缺點。
您可能想問問C++標準文檔在哪裏。
我不認爲這是一個好主意,你正在嘗試做的是告訴編譯器:
聲明D2在D2 放D1比D2 0 如果是= 0跳!下面 其他 聲明D3代碼 把10 D3 比較D2 0 如果它是!= 0跳轉到下面 其他 代碼跳過下面
代碼只是聲明D2和D3的康迪以上只有當你使用有限的內存(並且不希望在達到這段代碼之前爲d2和d3分配空間),這可能是一個好主意。這一切歸結爲你真正打算做的事情。
在C++中,你可以做這樣的事情:
if (bool b = (a == b)) {
// Do something with b here...
}
或:
if (double d2 = d1) {
// ...
}
但是,我從來沒有見過這種風格在真正的代碼中使用。我認爲總是有更清晰的方式來寫同一件事。
此外,試圖聲明if
或while
語句的條件部分中的多個變量不受支持。您將不得不求助於嵌套if
或else if
以獲得相同的語義。
實施例:
if (double d2 = d1) {
cout << "wow" << endl;
} else if (double d3 = 10) {
cout << "wow" << endl;
}
這樣d3
如果d2
評估爲假僅創建。
if((double d2 = d1) || (double d3 = 10))
cout << d2 + d3 << endl;
的||
操作者短路,所以d2 + d3
表達式引用(潛在地)未初始化D3。這樣的功能會產生很多不良影響,IMO也無濟於事,所以這可能就是爲什麼它不在那裏。
_uninitialized_變量在C++中沒有問題(只需鍵入'double d3;',你將會有一個)。我猜,問題出在_undeclared_變量中。例如,'double d3;如果(double d2 = d1 || d3 = 10)'會讓你的答案的第一句話(觀察)仍然是正確的,但是讓你的結論(你的答案的第二句)不正確。 – Jasper 2010-07-18 19:42:13
@Jasper,條件工作將等於允許跳過初始化變量,這同樣是不允許的。請注意'double d3;'是允許的,但'string s3;'永遠不會讓字符串「未初始化」 - 它會調用它的默認構造函數。但是,你期望一個可以轉換爲「布爾」的字符串在這樣的條件下做什麼?它會被它的構造函數初始化嗎? – 2010-07-18 19:48:58
@Johannes,我完全意識到,你正在「未定義行爲」的魔法世界中結束,在這個世界中,任何事情都可能發生,因此你仍然不應該使用我給的樣本,我只是試圖找出問題的原因更好。如果字符串是空的,我希望一個可轉換爲「bool」的字符串轉換爲false(儘管我會在字符串的文檔中查看它),但爲了查看我期望的''''情況,我需要一個你正在談論的情況的實例。 – Jasper 2010-07-18 19:55:41
可能還有其他的東西也困擾着你,但是||-operator的工作方式存在問題。我不記得它是如何在標準的措辭,但在a || b
或者你的編譯器應該不評估b
如果a
評估爲真,或者您的編譯器可能會選擇不這樣做。
考慮到在你的語句中你不能確定你的變量是否已經聲明 - 在C++中你只能使用聲明的變量,所以d3
在你的例子中將是一個非常無用的變量,如果你問我你不確定它是否已被聲明)。
不,那當然是無效的。你到底想做什麼? – 2010-07-18 19:06:34
這是不正確的,即使它被允許,它總是會評估爲真。 – DumbCoder 2010-07-18 19:17:09