2013-08-04 82 views
1

我試圖聲明和初始化範圍內的不同類型的變量。 喜歡的東西:範圍內多變量聲明和初始化

for (int i = 0, double u = 1; i < 10; ++i) 
{...} 

但是編譯器(GCC)返回我的錯誤。

我知道可以使用相同類型的變量(example)執行初始化,但我不知道如何使用不同的變量進行初始化。

我當然可以聲明變量外循環:

double u = 1; 
for (int i = 0; i < 10; ++i) 
{...} 

但我正在尋找的東西乾淨,因爲變量u僅用於內部的作用域。 所以,

  • 我可以做嗎?
  • 如果是這樣,我該怎麼辦?
+0

最簡潔的方法可能是將其作爲一個新的範圍,並將'u'放在循環之外。 – chris

+0

得到了,唯一的(醜陋的)方法是使用結構。在這種情況下,我唯一能做的就是在範圍外聲明'u'變量。 – Blex

回答

2

不允許在declration語句中聲明多個然後一個類型。包含範圍遠程接近for循環中u對應的唯一方法是類似的東西:

{ 
    double u = 1; 
    for (int i = 0; i < 10; ++i) 
    { 
     //some code 
    } 
}// u's scope will end here 
0

你要想想,如果你在代碼中的另一部分在聲明這些變量。 如果共享該類型,則可以在同一行中聲明儘可能多的變量。 您可以聲明: int a = 3,b = 3; 但'''指出這種類型聲明的結尾。如果你嘗試這樣做: int a = 3,double b = 3.4; 正如您希望編譯器將其翻譯爲b變量的「雙」聲明。首先編譯器將它識別爲一個int,但是然後你指定了另一個類型。這就是爲什麼你不能這樣做。如果你試圖按照你的編譯器所希望的那樣去做(type variable = value; another_type another_variable = another_value;),你會打破這個結構。

1

當然創建一個新的作用域會做,但編寫一個函數是更常見的方法。

void foo() 
{ 
    // So this function deals with loop and does something with 'u'. 
    double u = 1; 
    for (int i = 0; i < 10; ++i) 
    { ... } 
} 

很難說如果你真的需要一個功能,但我相信這是一個非常乾淨和自然的方式。