臨時變數、引用引數和const
知識點概要
如果實參與引用引數(形參)不匹配,C++將生成臨時變數。當前,僅當引數為const引用時,C++才允許這樣做。
臨時變數使函式在可處理的引數種類方面更通用,這些臨時變數只在函式呼叫期間存在,此後編譯器可以隨意將其刪除。因此,儘可能將引用型形參指定為const。
考慮建立臨時變數的情況,具體地,如果引用為const,編譯器將在下面兩種情況下生成臨時變數:
情形一:實參的型別正確,但不是左值。非左值包括字面常量和包含多項式的表示式。
未指定const時,程式會報錯,如下所示:
正確程式碼:輸出結果為 a。
#include <iostream> using namespace std; void printStr(const char & s) //必須指定const { cout << s << endl; } int main() { printStr('a'); //實參為字面常量的情況 system("pause"); return 0; }
情形二:實參型別不正確,但可以轉換為正確的型別。
錯誤示範:
正確例項:
using namespace std; void swapr(const int&a, const int&b) { cout << "函式引用過程中" << a <<" "<< b << endl; } int main() { double a = 3.1, b = 5.2; cout << "原始值" << a << " " << b << endl; swapr(a, b); cout << "呼叫後" << a << " " << b << endl; system("pause"); return 0; }
輸出結果:
同時出現一個warning:
小結
對於生成臨時變數的情況,注意將引用型形參指定為const。比如下面的情況:
已知宣告:
string foo();
void bar(string & s);
那麼:
bar(foo()); 非法,因為無參函式foo()返回的值肯定是臨時物件,此時呼叫函式bar()的形參必須是const型別。
相關推薦
臨時變數、引用引數和const
知識點概要 如果實參與引用引數(形參)不匹配,C++將生成臨時變數。當前,僅當引數為const引用時,C++才允許這樣做。 臨時變數使函式在可處理的引數種類方面更通用,這些臨時變數只在函式呼叫期間存在,此後編譯器可以隨意將其刪除。因此,儘可能將引用型形參指定為const。
C++引用—臨時變數、引用引數和const引用和左值右值引用
如果實參與引用引數不匹配,C++將生成臨時變數。如果引用引數是const,則編譯器在下面兩種情況下生成臨時變數: 實參型別是正確的,但不是左值 實參型別不正確,但可以轉換為正確的型別 Double refcube(const
C# 定義了 7 種變數類別:靜態變數、例項變數、陣列元素、值引數、引用引數、輸出引數和區域性變數
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
React引用子元件、定義引數和方法
匯入外掛 gulp-webpack jsx-loader react-dom react gulp-concat browser-sync gulp 完成資料結構 建立gulpfile.js var concat=require("gulp-concat"); var webpack=req
關於java的引數傳遞(值傳遞、引用傳遞和傳值、傳引用等)
所謂引數傳遞就是用函式呼叫所給出的實參(實際引數)向函式定義所給出的形參(形式引數)設定初始值的過程。基本的有三種引數分別為: (1)傳值: (2)傳址(即是傳指標) (3)傳引用 以上
C#中的棧和堆、值型別與引用型別、值引數、引用引數、輸出引數、引數陣列
程式執行時,資料必須儲存在記憶體中,一個數據需要多大的記憶體、儲存的位置、如何儲存依賴於該資料的資料型別。執行中的程式使用兩個記憶體區域來儲存資料:棧和堆。 棧: 棧是一
C語言之變數、常量(define\const)、變數的宣告和定義
記憶體地址 #include<stdio.h> #include<stdlib.h> #include<Windows.h> void main(){ int num = 10; int num1 = 20; int num2
C++臨時變數的生命週期(const 引用後延長臨時變數週期)
C++ 中的臨時變數指的是那些由編譯器根據需要在棧上產生的,沒有名字的變數。主要的用途主要有兩類: 1) 函式的返回值, 如: 1 string proc() 2 { 3 return string("abc"); 4 } 5 6 int
函式引數為值傳遞、引用傳遞和指標傳遞的區別:
1)值傳遞:int func(int value) { value++; return value; // 一般需要返回值 } int a=2; int b=func(a); //b==3;a==2;按值
Linux多執行緒程式設計---執行緒間同步(互斥鎖、條件變數、訊號量和讀寫鎖)
本篇博文轉自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了多種方式來處理執行緒同步,最常用的是互斥鎖、條件變數、訊號量和讀寫鎖。 下面是思維導
JavaScript複習筆記(一)變數、資料型別和運算子
1、JavaScript用來做什麼 HTML:專門編寫網頁內容的語言 CSS:專門美化網頁內容樣式的語言 JavaScript:專門編寫互動程式的語言 JavaScript包含三個方面:ECMAScript標準+DOM標準+BOM 2、常用語句 在控制檯中輸出一段話 &nbs
騰訊分分彩原始碼搭建出租變數、資料型別和運算
1、JavaScript用來做什麼 騰訊分分彩原始碼搭建出租【地瓜原始碼論壇diguaym.com】聯絡方式:QQ:2152876294原始碼交易,原始碼出售, 技術交易,專注於為企業 、個人提供個性化定製解決方案,更加高效便捷的為廣大需求者解決各種實際性需求問題,為您提供最新、最熱、
Linux Shell基礎 環境變數、位置引數變數、預定義變數
環境變數 環境變數和使用者自定義變數最主要的區別在於,環境變數是全域性變數,而使用者自定義變數是區域性變數。使用者自定義變數只在當前的 Shell 中生效,而環境變數會在當前 Shell 和這個 Shell 的所有子 Shell 中生效。如果把環境變數寫入相應的配
值型別、引用型別 和 里氏轉換
一、值型別和引用型別 值型別:在棧上存在的是值 引用型別:棧上存的是地址,堆上存在的是值 類和結構的區別: 相同點:預設都有一個無引數的建構函式 不同點: 類:值型別的值存在棧上,引用型別 棧上存在的是地址,值在堆上 &nb
js學習筆記-第二章變數、作用域和記憶體問題-執行環境和作用域
//執行環境:執行環境(execution context,為簡單起見,有時也稱為“環境”)是 JavaScript 中最為重要的一個概念。執行環境定義了變數或函式有權訪問的其他資料,決定了它們各自的行為 //變數物件:。每個執行環境都有一個與之關聯的變數物件(variable object
讀書筆記4:變數、作用域和記憶體問題
基本型別和引用型別的值 (1)概念 基本型別的值指的是簡單的資料段,而引用型別的值指那些可能由多個值構成的物件。 引用型別的值是儲存在記憶體中的物件。JavaScript 不允許直接操作物件的記憶體空間,實際上操作的是物件的引用,而不是實際的物件。
Thymeleaf 之 內建物件、定義變數、URL引數及標籤自定義屬性_Thymeleaf
如標題所述,這篇文章主要講述Thymeleaf中的內建物件(list解析、日期格式化、數字格式化等)、定義變數、獲取URL的引數和在頁面標籤中自定義屬性的應用。 如果對Thymeleaf的基本使用、maven依賴等不清楚的可以先閱讀我的另一篇文章《Thymeleaf 之 初
Java變數、資料型別和運算子
/* *掌握變數的概念 *掌握常用資料型別 *會使用賦值運算子、算術運算子 *掌握boolean型別和關係運算符的使用 *會進行資料型別轉換 *掌握鍵盤輸入Scanner */ 一、記憶體的作用 記憶體又稱主存,是CPU能直接定址的儲存空
20181212——第四章 變數、作用域和記憶體問題
基本型別和引用型別 基本型別指的是簡單的資料段,而引用型別指的是那些可能由多個值構成的物件 基本型別是按值訪問,因為可以操作儲存在變數中的值 引用型別的值是儲存在記憶體中物件,與其他語言不同,javascript不允許直接訪問記憶體中的位置,也就是說不能直接操作物件的記憶體空間,在操作物件的
Java的final變數、final方法和final類
1、final變數 final關鍵字可用於變數宣告,一旦該變數被設定,就不可以再改變該變數的值。通常,由final定義的變數為常量。 例如,在類中定義PI值,可以使用如下語句: final double PI=3.14; 當在程式中使用到PI這個常量時,它的值就是3.