2012-05-28 59 views
0

考慮char firstLetter=word[0];,除了將它用作糖以提高可讀性外,您不會對firstLetter執行任何操作。除#define之外是否還有其他內容可以創建內聯「別名」而不是分配新內存?我知道一個腳本可以寫,但如果已經存在...用於糖語法的別名而不是新變量

+0

C++或C(或兩者)?這兩種語言的答案(及其便利性)各不相同。 – delnan

+0

C++主要是.. – user1420741

回答

0

如果問題真的關於C++,你可以隨時創建對象的別名:

char& firstLetter=word[0]; 

這將使firstLetter和別名爲word[0](假設word是一個數組,而不是指針稍後改變)。

+0

這就是我一直在尋找的東西。謝謝,博。對於任何閱讀本文的人來說,我也發現C++ 11中的constexpr用於相似但不完全相同的目的。 – user1420741

1

這裏沒有內存分配;可以將word[0]的值複製到寄存器或堆棧中,但是編譯器是否需要這樣做。

請注意,「內聯別名」會導致更糟的代碼被生成;表達式word[n]意味着一些計算,如果您使用某種替換,則會重複多次。

+0

那麼,除非編譯器執行常見的子表達式刪除並計算一次地址。它可能會做得很好(除了'volatile'之類的令人討厭的東西外)。這不是效率問題。 – delnan