C++中賦值操作符為什麼要返回引用型別
class Test
{
Test& operator= (const Test& t)
{
}
}
這個是我們熟悉的賦值操作符函式的格式,但是該函式為什麼非得要返回一個引用呢。
查閱了很多資料感覺這種解釋比較靠譜:
Test a,b,c;
a=b=c
這裡存在連續賦值,這是符合C++的語法規範的。如果賦值操作符返回一個引用型別,倒不是說 b=c 返回的引用變數直接賦值給a,畢竟a不是引用型別。
該過程實際上是 b=c 返回一個引用temp,然後 a=temp 再次呼叫賦值操作符。這裡存在兩次呼叫賦值操作符。
如果賦值操作符不是返回的一個引用那麼 在b=c呼叫複製操作符之後就會再次呼叫拷貝建構函式返回一個臨時物件temp 然後 a=temp 再呼叫賦值操作符。增加了一次拷貝的代價。
相關推薦
C++中賦值操作符為什麼要返回引用型別
class Test { Test& operator= (const Test& t) { } } 這個是我們熟悉的賦值操作符函式的格式,但是該函式為什麼非得要返回一個引用呢。 查閱了很多資料感覺這種解釋比
c++中賦值運算符重載為什麽要用引用做返回值?
font round opera () const pub copy構造函數 per size class string{ public: string(const char *str=NULL); string(const string& str);
C#中的值類型和引用類型以及堆棧
堆棧 ima tro nbsp 在線 hid class類 sed pen 引用類型如:string,Object,class等總是在從托管堆上分配的,C#中new操作符返回對象的內存地址--也就是指向對象數據的內存地址。 以下是值類型與引用類型的表: 我們來看下
淺談C#中的值類型和引用類型
title log 創建 編譯 設計 編寫 通過 發布 構造 在C#中,值類型和引用類型是相當重要的兩個概念,必須在設計類型的時候就決定類型實例的行為。如果在編寫代碼時不能理解引用類型和值類型的區別,那麽將會給代碼帶來不必要的異常。很多人就是因為沒有弄清楚這兩個概念從而在編
【.Net】淺談C#中的值類型和引用類型
rem 理解 amp div net 親情 實例 函數 大小 在C#中,值類型和引用類型是相當重要的兩個概念,必須在設計類型的時候就決定類型實例的行為。如果在編寫代碼時不能理解引用類型和值類型的區別,那麽將會給代碼帶來不必要的異常。很多人就是因為沒有弄清楚這兩個概念從而在編
c++中賦值運算符中的隱式轉換
字符串 {} new () 再看 null del delete ret 先上代碼: #include<iostream> #include<string> using namespace std; class MyStr { private:
C# List 賦值(一) --引用類型的賦值和復制
地址 修改 引用 進行 urn ont pre 詳細 理論 最近項目維護中遇到一個問題,確切的說應該是兩個月前的問題也是因為這裏引起的,可惜當時困於業務不熟悉,也沒有更多時間允許查詢根源,導致再次引發了新的問題!!! 問題場景:基礎數據存於List類型的BOMs中,計算過程
為什麼c++中過載流操作符要用友元函式
1.先來看看友元函式過載流操作符例項 class complex { public: complex(int x, int y): real(x), imag(y){} complex():complex(0,0){} ~complex(){}
【c++】c++中重載輸出操作符,為什麽要返回引用
不返回 定義 類型 AS 標準 操作符 連續 新的 輸出 針對:ostream & operator <<(ostream & os, const ClassType &object) 說明幾點: 1.第一個形參為對ostream對象的引
c++ 類中重寫賦值操作符遇到的問題
c++工程目錄結構: currency.h程式碼如下: #include <cstdlib> #include <iostream> using namespace std; #ifndef CURRENCY_H #define CURRENCY
批註:C++中複製建構函式與過載賦值操作符總結:預設淺拷貝,帶指標的需要深拷貝
前言 這篇文章將對C++中複製建構函式和過載賦值操作符進行總結,包括以下內容: 複製建構函式和過載賦值操作符的定義;複製建構函式和過載賦值操作符的呼叫時機;複製建構函式和過載賦值操作符的實現要點;複製建構函式的一些細節。 複製建構函式和過載賦值操作符的定義 我們都知道
C++中建構函式初始化列表為什麼會比建構函式中賦值要高效
Test { Test(test& t1) { this->t=t1; } private: test t; } 相信很多人跟我一樣,非常困惑為什麼Test構造時會先呼叫test的建構函式,再呼叫test類的賦值操作符。那是因為賦值操作符不能產生新的物件,Te
c#中 命令copy 已退出,返回值為1
col .cn 文件 返回 copy nbsp spa round img 後期生成時間命令行,可以指定生成目錄,是否刪除.pdb文件 c#中 命令copy 已退出,返回值為1
深入理解PHP中賦值與引用
str ring int 之前 不同 重新 small nts 計數 【原文】 先看下面的問題: 1 2 3 4 5 6 7 8 <?php $a = 10;//將常量值賦給變量,會為a分配內存空間 $b = $a;//變量賦值給變量,是不是
C++11六大函數(構造函數,移動構造函數,移動賦值操作符,復制構造函數,賦值操作符,析構函數)
his 類對象 多個 post highlight water iss 重獲新生 amp 在C++中,有三大函數復制控制(復制構造函數,賦值操作符,析構函數),而在C++11中,加入了移動構造函數,移動賦值操作符。我就鬥膽將他們命名為六大函數好了。 一、構造函數 c++
15.賦值運算子為什麼返回類的引用?不是引用怎麼辦?
賦值運算子為什麼返回類的引用?不是引用怎麼辦? class string{ public: string(const char *str=NULL); string(const string&a
c#中的值型別和引用型別 裝箱拆箱 (好文)
一,c#中的值型別和引用型別 眾所周知在c#中有兩種基本型別,它們分別是值型別和引用型別;而每種型別都可以細分為如下型別: 什麼是值型別和引用型別 什麼是
vue 爬坑 之js 物件/陣列 賦值/拷貝 解決VUE中賦值引用後資料雙向改變的問題
淺拷貝這裡就不講了,我們直接講深拷貝 正常的陣列/物件拷貝可以直接用 const cloneObj = JSON.parse(JSON.stringify(Obj)); 這種方式可以解決相當多一部分的賦值問題,但是一些特殊屬性除外(undefined/function)
C++ 拷貝建構函式和過載賦值操作符不能相互呼叫
拷貝建構函式呼叫過載賦值操作符,過載賦值操作符呼叫拷貝建構函式的寫法都是沒有意義的。首先:拷貝建構函式的存在意義--------是通過已有的物件構造新的物件,構造完畢後才有兩個物件;過載賦值操作符的意義-----------將一個物件的值賦給另一個物件,兩個物件都已經構造完畢了。拷貝建構函式----呼叫---
C++在單繼承、多繼承、虛繼承時,建構函式、複製建構函式、賦值操作符、解構函式的執行順序和執行內容
一、本文目的與說明 1. 本文目的:理清在各種繼承時,建構函式、複製建構函式、賦值操作符、解構函式的執行順序和執行內容。 2. 說明:雖然複製建構函式屬於建構函式的一種,有共同的地方,但是也具有一定的特殊性,所以在總結它的性質時將它單獨列出來了。