自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++常量引用正確應(yīng)用方法

開發(fā) 后端
C++常量引用的操作,首先需要建立一個臨時變量。具體的操作方法將會在這篇文章中為大家詳細介紹。希望能給大家?guī)硪恍椭?/div>

C++編程語言中,對于常量的引用是一個非常重要的應(yīng)用技巧。在這篇文章中,我們將會為大家詳細介紹一下有關(guān)C++常量引用的相關(guān)應(yīng)用方法,相信大家可以從中學(xué)到很多知識。#t#

如果是對一個常量進行引用,則編譯器首先建立一個臨時變量,然后將該常量的值置入臨時變量中,對該引用的操作就是對該臨時變量的操作。對C++常量引用可以用其它任何引用來初始化;但不能改變。

關(guān)于引用的初始化有兩點值得注意:

(1)當(dāng)初始化值是一個左值(可以取得地址)時,沒有任何問題;

(2)當(dāng)初始化值不是一個左值時,則只能對一個const T&(常量引用)賦值。而且這個賦值是有一個過程的:

首先將值隱式轉(zhuǎn)換到類型T,然后將這個轉(zhuǎn)換結(jié)果存放在一個臨時對象里,***用這個臨時對象來初始化這個引用變量。

例子:

 

  1. double& dr = 1; // 錯誤:需要左值  
  2. const double& cdr = 1; // ok 

 

第二句實際的過程如下:

 

  1. double temp = double(1);  
  2. const double& cdr = temp

 

 

作函數(shù)參數(shù)時:

 

  1. // bc_temp_objects_not_bound_to_nonconst_ref.cpp  
  2. // compile with: /EHsc  
  3. #include "iostream"  
  4. using namespace std;  
  5. class C {};  
  6. void f(C & c) { cout << "C&" << endl; }  
  7. void f(C const & c) { cout << "C const &" << endl; }  
  8. int main() {  
  9. f(C());  

 

結(jié)果:

C const &

更直接的,用基本類型:

 

  1. #include <iostream> 
  2. using namespace std;  
  3. void display(int const &ref) {cout<<ref<<'\n';}  
  4. int main()  
  5. {  
  6. int i=1;  
  7. display(i);  
  8. int const anotheri=2;  
  9. display(anotheri);  
  10. display(2);  
  11. display(1+2);  
  12. display(static_cast<int>(3.14159));  

 

通過C++常量引用從函數(shù)返回一個局部對象:

一般從一個函數(shù)返回一個局部對象的引用是不對的:
 

 

  1. T & my_op ( void )   
  2. {   
  3. T t;   
  4. return t;   
  5. } // The T object t got destroyed here so the 
    returned reference is not valid anymore.  

 

特殊情況:返回一個常引用

 

  1. const T & my_op ( void )   
  2. {   
  3. T t;   
  4. return t;   
  5. }   
  6. const T & my_t_obj = my_op ();  

 

在這個情況下,局部變量 t 不會被直接析構(gòu),而是會保留到 my_t_obj 的生命周期結(jié)束為止。

總之,C++常量引用語法上可以引用一個臨時變量。這種方法在使用引用作函數(shù)參數(shù)和返回局部變量時有意義。我目前看來常量引用主要用在作函數(shù)參數(shù)或保證不修改原變量的時候。

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-01 15:26:44

C++ inline函

2010-02-05 14:12:46

C++聲明放置

2010-03-04 14:02:51

Python大小寫

2009-12-07 14:38:14

PHP foreach

2010-05-28 15:16:40

MySQL 資源

2010-02-22 10:42:12

WCF Stream

2010-01-25 09:28:54

Android模擬器

2010-02-22 14:09:08

WCF Dispose

2010-05-25 18:01:35

linux MySQL

2010-05-28 19:20:36

MySQL mysql

2011-03-30 17:20:18

C++引用

2010-07-21 10:50:48

SQL Server存

2010-07-26 17:43:34

SQL Server

2010-03-04 13:30:11

Python file

2010-03-04 09:40:52

Python Clas

2010-03-03 17:58:16

Python同步隊列

2010-01-25 11:29:33

Android計時器

2010-03-05 15:01:29

Python解析XML

2021-07-02 16:13:01

區(qū)塊鏈金融數(shù)據(jù)庫

2010-08-18 16:45:40

IBM DB2 Cat
點贊
收藏

51CTO技術(shù)棧公眾號