簡體   English   中英

for循環中的const值

[英]const value in for loop

我看過類似的代碼

方法1

for(int i = 0; i < 200; ++i) {
    do_some_stuff(i);
}

方法2

const int max_limit = 200;
for(int i = 0; i < max_limit; ++i) {
    do_some_stuff(i);
}

Approach 1相比, Approach 2有什么優勢嗎?

通常最好的做法是用有意義的名稱替換整數常量,因此,這是第二個常量的主要優點。 但是,如果代碼真的很簡單,則多余的行可能只是使其解析多了一行。

也就是說,如果您要替換這樣的內容:

for(int i = 0; i < something.size(); ++i) {
    do_some_stuff(i);
}

const int something_sz = something.size();
for(int i = 0; i < something_sz; ++i) {
    do_some_stuff(i);
}

再有就是它使明顯的讀者,以及編譯器的額外的好處,那something.size()沒有被調用改為do_some_stuff(i)

在代碼中的任何地方使用魔術數字(例如您的示例中的200都令人擔憂。 它使代碼更難於理解和維護。

如果適當命名變量,則方法2更好。 max_limit含義不超過200 但是,如果使用max_number_of_books ,則它比200有意義得多。

對我來說,方法2更好,當您定義const int max_num_of_students之類的const int max_num_of_students它看起來更有意義,並且閱讀該代碼的人可以輕松地了解發生了什么。

在循環中使用這種const另一個優點是,如果您多次打印學生的姓名,則無需在每次學生人數增加時都在循環中更改條件。 轉到您的變量並將其更改為新學生人數。

我認為方法2更好。

  1. 可讀性得到增強。

    例如:

     int currentPortNo=getPortNo(); const int inputPort=80; if(currentPortNo == inputPort){ //Get input from port } 

    與以下內容相比:

     int currentPortNo=getPortNo(); if(currentPortNo == 80){ //Get input from port } 
  2. 可維護性得到了增強,因為由於新的要求/限制,如果我們希望將inputPort初始化(更改)為81而不是80 ,我們可以簡單地使用:

     const int inputPort=81; 

    而不是更改整個程序中使用值80所有場合。

  3. 另外,如果您需要在程序周圍傳遞指針

  4. 可以具有范圍輸入屬性

我們應該避免在編寫代碼時隨時使用magic number 因為如果僅使用數字200 ,則也許其他人不能很好地理解您的代碼的意圖。 但是當您使用const int max_limit = 200; ,我們可以理解數字200的含義。 尤其是當您的代碼非常復雜時,您必須使用第二種方法編寫它。

第二種方法更好,因為這樣您還可以從用戶那里獲得價值:

cin>>max_limit;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM