我想知道在函式中是否必須要有常數引數。 最近我在面試中寫了一段代碼,如下所示
int numofsubstring(string s1, string s2)
{
int nCount =0;
size_t pos;
while((pos = s1.find(s2)) != string::npos)
{
nCount ;
s1 = s1.substr(s1.find(s2) s2.length())。
}
return nCount。
} //s2在s1中出現的次數。
面板期望的是const string&s1 ,const string&s2,但我沒有寫,因為substr功能的使用......
誰能指導一下,寫代碼的標準格式是什么?.... 評審委員會堅持要改進函式中的引數。
uj5u.com熱心網友回復:
在有 "規則 "的范圍內,規則是
如果你有一些函式需要一個
T,而你可以傳遞一個const T&而不影響正確性,那么你應該傳遞一個const T&。
這是在消除不必要的復制。傳遞一個參考就像傳遞一個指標。沒有什么會被復制,所以函式的性能會更好。
uj5u.com熱心網友回復:
不,在函式中不一定要有常數引數。請注意,你寫的函式是使用pass by value。而如果你的函式引數是const std::string&那么它就是pass by reference。
使用const std::string&版本的原因之一是,在這種情況下,將沒有 "復制 "傳遞的字串,所以它比按值傳遞版本更快(對于很長的字串)。
另外,在按值傳遞的情況下,傳遞的引數將被復制,每個引數將在函式范圍結束后被銷毀。在pass by reference版本中,這個銷毀部分將不會發生。
編輯:
如果你希望傳遞給函式的引數在函式體中不被改變,那么你可以添加const。下面是使引數const的方法,即它們不能再在函式體中被改變。
方式1
//pass by value,現在我們已經添加了const,引數s1和s2在函式體中不能被改變。
int numofsubstring(const string s1, const string s2)
{
//some code here
}
方式2
//pass by reference,現在我們已經添加了const,引數s1和s2不能在函式體內部改變。
int numofsubstring(const string& s1, const string& s2)
{
//some code here
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314143.html
標籤:
