C++ 使用const 引用傳遞引數
類似const & int 的形式是C++的常量引用,在函式引數引數列表中常使用const的引用。
引用的作用是防止值傳遞,這樣可以提高程式碼效率,這種設計策略還能使函式執行的更快,而const是防止誤修改函式引數的值。對於一個函式來講,我們以前都知道函式傳遞時值傳遞,也就是說,我們在函式呼叫時,會為形參重新分配記憶體,並將實參的值拷貝進去,例如:
void func(int a,int b)
{
//...
}
int main()
{
int aa=3;
int bb=4;
func(aa,bb);
return 0;
}
以前我們知道在func()
aa和bb
的值分別放進去,這種值傳遞的拷貝,當引數是結構複雜的結構體時,就大大的浪費儲存了。 所以,使用const 引用可以在保證引數不被修改的前提下,防止資料的值傳遞拷貝。
最近,在看函式模板時《C++ Primer》(第五版)581頁
,提到編寫泛型程式碼的兩個重要原則,其中之一就是:
模板中的函式引數是const的引用
其給出的解釋就很清楚了:
通過將函式引數設定為const的引用,我們保證了函式可以用於不能拷貝的型別。當然大多數型別都是允許拷貝的,但是不允許拷貝的類型別也是存在的。
相關推薦
C++ 使用const 引用傳遞引數
類似const & int 的形式是C++的常量引用,在函式引數引數列表中常使用const的引用。 引用的作用是防止值傳遞,這樣可以提高程式碼效率,這種設計策略還能使函式執行的更快,而const是防止誤修改函式引數的值。對於一個函式來講,我們以前都知道
C++ const引用、臨時變數 引用引數
C++引用—臨時變數、引用引數和const引用 如果實參與引用引數不匹配,C++將生成臨時變數。如果引用引數是const,則編譯器在下面兩種情況下生成臨時變數: 實參型別是正確的,但不是左值 實參型別不正確,但可以轉換為正確的型別 左值引
C#形參,實參,值傳遞引數,引用傳遞引數,輸出引數,引數陣列的學習
1)形參 形參顧名思義就是形式上的引數,不是實際的引數,它代替實際傳入方法的值。在方法體程式碼中代表了值本身參與運算。形參定義於引數中,它不同於方法體內區域性變數,因為是一個變數,在它的作用域內不允許存在一個同名的區域性變數,不管他們的型別是否相同,都是不允許出現同名的
C++ main 方法傳遞引數
示例程式碼如下: #include <iostream> using namespace std; int main(int argc, char * argv[]) { //如果你需要2個引數,這裡就 與 3 做判斷,可自行嘗試 if (argc != 3) {
C++ const 引用 指標答疑
常變數 const int a 常引用 const int &a 常指標 const int *a const * int a 用法1:常量 取代了C中的巨集定義,宣告時必須進行初始化(!c++類中則不然)。const限制了常量
又被引用傳遞引數坑了
雖然這個問題從我入門那一天起就知道了,可是很不幸的,剛剛刷題又陷進去了。 以Java為例做說明: 關於Java引數引用的說明 Java中只有值傳遞,不管是原始型別還是引用型別,傳遞的都是副本。 ①如果引數型別是原始型別,那麼傳過來的就是這個引數的一個副本,也就是這個原始引數的值。&n
c++模組間傳遞引數的一些經驗教訓
最近在開發一套新產品,測試中發現了一些UI奔潰,自己在設計模組通訊介面方面考慮不周全,在此做一下記錄。 需求: 兩個模組,UI排程模組以及實際功能模組。UI排程模組需要呼叫功能模組,獲取資料,顯示在UI上面。 // 之前的做法: 1.在
Javascript 呼叫C# 程式碼並傳遞引數的兩種方法
Javascript呼叫C#程式碼的方法網上介紹了很多種方法,也很詳細,但沒有向C#傳遞引數的方法。今天剛好用到,搞了半天才搞出來(其實我很笨)。下面說一下具體實現的方法。 一、使用HiddenField 控制元件。 HiddenField
python中是按值傳遞引數還是按引用傳遞引數
在學習python函式的時候,遇到了一個非常有趣的問題: 在函式中的引數是如何傳遞的:是傳值?還是傳引用?當然,結果我們是知道的,肯定是傳引用的。 現在,我們來測一下我們的結論: ===== 修改li
[轉載]C++中引用傳遞與指標傳遞區別(進一步整理)
這篇文章是在學習了編譯原理引數傳遞後對c++和Java按引用傳遞的不同表現產生疑問,在網上搜索找到的博文,這裡提出了按地址傳遞和按引用傳遞是不同的,按我的個人理解,Java的物件引數的傳遞,是按地址傳遞,而按地址傳遞,需要有一個傳遞到被呼叫函式的指向實
寧以const引用傳遞代替按值傳遞(內建型別除外)
預設的情況下C++是按值傳遞的,這可能付出昂貴的代價(費時)。 看看下面的程式碼吧: class Person { public: Person(); virtual ~Person(); ... private: s
【Qt】訊號和槽對值傳遞引數和引用傳遞引數的總結
在同一個執行緒中 當訊號和槽都在同一個執行緒中時,值傳遞引數和引用傳遞引數有區別: 值傳遞會複製物件;(測試時,列印傳遞前後的地址不同) 引用傳遞不會複製物件;(測試時,列印傳遞前後的地址相同)
C#中引用傳遞與指標傳遞區別
從概念上講。指標從本質上講就是存放變數地址的一個變數,在邏輯上是獨立的,它可以被改變,包括其所指向的地址的改變和其指向的地址中所存放的資料的改變。 而引用是一個別名,它在邏輯上不是獨立的,它的存在具有依附性,所以引用必須在一開始就被初始化,而且其引用的物件在其整個生命週
C++中引用傳遞參數的效率分析
傳遞參數 進行 上傳 自定義 函數定義 因此 clas 指針 struct 眾所周知,在C++中有三種參數傳遞的方式: 按值傳遞(pass by value) #include <iostream> using namespace std; void s
C#系列 ---5 函式引數 optional , ref, out, params 和 引數值傳遞和引用傳遞問題
variables and parameters variable 代表的是一個記憶體地址,該地址包含一個可變的值。可以是local variable, parameter (value, ref, or out), field (instance or static), or arra
C#中值型別和引用型別引數傳遞
原則:儘可能控制對資料的修改,如果可以預測某個資料不會或不應該被改變,就要對其控制,而不要期望使用這個資料的呼叫者不會改變其值。 如果引數在使用過程中被意外修改,將會帶來不可預知的結果,而且這種錯誤很難被檢查到,所以我們在設計方法引數的時候,要充分考慮傳遞引用型別引數或者引用方式傳遞引用型別
C# 當陣列引數引用傳遞 new 解惑
請看下面程式碼: 1 static void Main(string[] args) 2 { 3 int[] a = new int[]{ 1, 2, 3 }; 4 Test_1(a); 5 Console.WriteLine(string.Join(",", a)
C# 當陣列引數引用傳遞 遇上 new
請看下面程式碼: static void Main(string[] args) { int[] a = new int[]{ 1, 2, 3 }; Test_1(a); Console.WriteLine(string.Join(",", a)); Test_
const引用做形參---函式引數的傳遞,並不都是複製
使用引用做形參,可以直接訪問實參物件,並改變實參內容,而不是將實參複製給形參,所以在大資料傳遞時, 用引用做形參可以提高效率。 void f(int& x)//引用做形參 { x=7; } int main() { int y=0;
C++三種引數傳遞方法(值傳遞、指標傳遞、引用傳遞)的一些知識
C++的函式引數傳遞有三種方法:值傳遞、引用傳遞、指標傳遞 。其中引用傳遞和指標傳遞幾乎一樣,只不過引用傳遞在使用時比指標更安全。 (1)關於函式返回一個物件 當你的函式返回型別是【非引用】的型別時,return時先呼叫該類的拷