[英]Do c++ blocks { } have a negative impact
我最近發現{}
塊可以單獨使用。 對我來說,在某些情況下,這可能是真正的輔助可讀性。例如,在以下代碼中:
push();
foo();
push();
foo();
foo();
pop();
pop();
可以成為(不與IDE自動壓縮):
push();
{
foo();
push();
{
foo();
foo();
}
pop();
}
pop();
除了對風格的主觀意見之外,這是否會產生任何負面影響(比如編譯器中的較少受害者,它們還有其他用途等)或這些塊是否可以安全使用。
當它們不改變代碼的含義時(如在您的示例中),沒有理由它們應該對優化產生任何影響。 如果他們這樣做,那么這是特定編譯器的怪癖。
要強制你的pop()
調用映射push()
調用,你甚至可以這樣做:
struct Pusher {
Pusher() { push(); }
~Pusher() { pop(); }
};
...
{
Pusher p1;
foo();
{
Pusher p2;
foo();
foo();
}
}
該模式通常稱為RAII。 它確實改變了代碼的含義 - 在我的代碼中,如果對foo()
一個調用拋出異常,則會調用pop()
,而在你的代碼中則不會。 在大多數(但不是全部)需要在返回之前撤消某些內容的情況下,您還需要撤消異常。
關於你的第二個例子的一切都是100%罰款。 額外的塊可能會影響在它們中聲明的變量的范圍,但是你沒有做任何這些。
像這樣創建塊會創建新的范圍。 因此,您將在進入和退出這些范圍時運行構造函數和析構函數。 您還有更多機會讓名字互相隱藏。 它們可以安全使用,但您必須牢記這些事情。
順便說一下,這是主觀的,但我沒有發現你對范圍的使用有助於提高可讀性。 你可以用空行完成同樣的事情。 如果我在評論中看到您的代碼,我會問自己為什么要創建這樣的范圍。
與RAII風格編程一起控制生命期的一個范圍是有用的。 在此示例中,范圍用於限制互斥鎖保持的時間量。
int a = b + c;
{
OS::Mutex::Lock lock(mutex);
some_shared_variable = a;
}
這里的Lock
是一個RAII樣式類,它在構造函數中獲取互斥鎖並在析構函數中釋放它。 通過顯式使用范圍,您可以限制鎖定的持續時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.