[英]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更好。
可讀性得到增強。
例如:
int currentPortNo=getPortNo(); const int inputPort=80; if(currentPortNo == inputPort){ //Get input from port }
與以下內容相比:
int currentPortNo=getPortNo(); if(currentPortNo == 80){ //Get input from port }
可維護性得到了增強,因為由於新的要求/限制,如果我們希望將inputPort
初始化(更改)為81
而不是80
,我們可以簡單地使用:
const int inputPort=81;
而不是更改整個程序中使用值80
所有場合。
另外,如果您需要在程序周圍傳遞指針 。
可以具有范圍和輸入屬性
我們應該避免在編寫代碼時隨時使用magic number
。 因為如果僅使用數字200
,則也許其他人不能很好地理解您的代碼的意圖。 但是當您使用const int max_limit = 200;
,我們可以理解數字200
的含義。 尤其是當您的代碼非常復雜時,您必須使用第二種方法編寫它。
第二種方法更好,因為這樣您還可以從用戶那里獲得價值:
cin>>max_limit;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.