1. 程式人生 > >臨時變數、引用引數和const

臨時變數、引用引數和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.