2010-07-05 40 views
1

在C++中,如何在塊的中途重命名變量?引用和宏感覺不對。如何在塊中途重命名變量?

+8

你爲什麼想要這樣做? – 2010-07-05 02:35:16

+3

你想完成什麼? – Shog9 2010-07-05 02:36:04

+8

你想要做什麼感覺不對。 – 2010-07-05 02:37:44

回答

12

你不能。

但是你可以參考它並在不同的「名稱」下訪問它。 如果你真的不喜歡這個變量,只需從當前塊中退出,從函數返回,離開塊。

+1

+1。 「你不能」是這個問題的唯一正確答案。 – 2010-07-05 02:54:26

0

您擁有的最佳選擇是創建一個新變量並將其設置爲等於舊變量,然後刪除舊變量。雖然我無法想象,你爲什麼會想

+2

你不能*刪除*一個可靠的。即使變量是一個指針,並且你調用* delete *,變量仍然會在這裏,儘管你會釋放一個內存塊。 – SigTerm 2010-07-05 02:43:43

+0

當然,如果你想成爲書呆子,但任何一個C程序員都明白,當你打電話給你時,你在技術上不會刪除任何東西,只是釋放內存。對不起,我的詞彙量很大。 – jordanstephens 2010-07-05 03:25:19

1

我想你可以做喜歡的事,可怕:

int _internal; 

#define foo _internal 
foo = 3; 
#undef foo 
#define bar _internal 
std::cout << bar; 

不過,我看不出有什麼好的理由,永遠。

+4

我應該指出,我第一次寫這個錯誤時發生錯誤的事實清楚地表明,這是不該做的事情。 – Shirik 2010-07-05 02:39:53

8

使用參考。

int old_name = 1; 
// ... 
int& new_name = old_name; 
new_name = 2; 

但你爲什麼要這麼做?

+0

但感覺不對 – Tom 2010-07-05 04:07:33

+0

可能是因爲這樣做沒有用處? – 2010-07-05 04:19:21

+2

有時可能會對清晰度有所幫助。不是通過引用來引用參數,而是使用顯式副本作爲返回值,您可以通過值獲取參數,並創建一個引用,以在該函數的持續時間內爲其提供更多的輸出y名稱。 – Cogwheel 2010-07-05 04:32:07

0

個人而言,我認爲你應該選擇一個名字並堅持貫穿始終。當你幾個星期之後回去閱讀你的代碼時,你會不由自主地想知道你在想什麼。如果您不喜歡在您的方法或課程結束後選擇的名稱,大多數IDE都提供了一些重構功能,您應該可以使用這些重構功能快速,完整,正確地或多或少無痛地進行更改。如果您使用相同的變量來執行多個不同的目的,那麼您應該使用更多的變量,其中一個用於這些不同的目的。

1

如果變量的用途在塊的中途改變,您可能想要將塊分成兩個方法/函數,並將該變量作爲參數傳遞給每個方法/函數。或者,如果塊的前半部分生成變量的值並且後半部分將其消耗,那麼讓第一個函數返回變量,第二個函數使用它。

(編輯) 另外請注意,您可以通過將局部變量裏面多餘的塊定義避開臨時名稱衝突:如..

int x() 
{ 
    int y = 0; 
    { 
     int i = /* create i */; 
     y = compute_y(i); 
    } 

    int z = 0; 
    { 
     int i = /* create another i */; 
     z = compute_z(y, i); 
    } 
    return z; 
} 

在此功能,我可以聲明兩倍的變量,在不同的子塊和名稱不會衝突,因爲在創建第二個i之前,第一個i將超出範圍。就個人而言,如果我有足夠大的功能需要這種範圍,我會將它分成多個小函數,就像我上面提到的那樣。

1

我與其他人在這裏 - 你爲什麼要這樣做?因爲很難想象有合理的理由。總是有可能有理性的理由提供它。

這裏有不好的反應。做你所要求的東西很容易成爲維修的噩夢。英語中有很多詞彙用於正確命名變量,並且作爲程序員,您可以自己編寫一個變量。

無論如何,這有點像從誕生之後打電話給你的女兒吉爾,然後在她十三歲生日時突然改名爲蘇西。事實上,當你的麻煩剛剛開始時會造成麻煩。

戴夫