C++
-
臨時物件、
- 即臨時變數、由系統和寫代碼時產生、可以通過優化代碼來減少部分寫代碼時產生的臨時變數、
- 堆疊常存放臨時變數、堆疊上的臨時變數一般是由系統自動產生的、
- 使用new產生的空間必須通過使用delete來釋放、
-
產生臨時物件
-
以傳值的方式給函式傳遞引數、
-
class a { public: int b1; int b2; public: a(int f1 = 0, int f2 = 0);//宣告時需要由默認值 a(const a& c) :b1(c.b1), b2(c.b2)//拷貝建構式、 { cout << "拷貝" << endl; } virtual ~a()//解構式 { cout << "呼叫了解構式"<< endl; } public: int e(a d);//普通函式 //int e(a &d);//參考便產生影響 }; a::a(int f1, int f2 ):b1 (f1),b2(f2)//類外實作建構式、宣告時需要由默認值、定義時可以不需要默認值 { cout<<"呼叫建構式"<<endl; cout << "b1是" <<b1<< endl; cout << "b2是" << b2 << endl; } int a::e(a d)//區域物件、臨時物件(特殊的、一般臨時物件是不顯示代碼的、這是假的臨時物件?)、臨時使用求和、 //int a::e(a &d)//參考便產生影響 30行 左值參考、 直接傳值、 { int q = d.b1 + d.b2; d.b1 = 100;//賦新值、修改值對外沒有影響因為是拷貝出來的、參考有影響、 return q; } int main() { a g(10, 30);//呼叫建構式、 int he = g.e(g);//會導致拷貝建構式執行、 cout << "合是" << he << endl; cout << "b1的值" << g.b1 << endl;
-
-
型別轉換生成的臨時物件和隱式型別轉換以保證函式呼叫成功、
-
C++語言只會為const參考(const string &n)產生臨時變數、而不會為非const參考產生臨時參考、
-
#include <iostream> #include<stdio.h> #include<string> #include<string.h> #include <vector> using namespace std; class a { public: int b1; int b2; public: a(int f1 = 0, int f2 = 0);//宣告時需要由默認值 a(const a& c) :b1(c.b1), b2(c.b2)//拷貝建構式、 { cout << "拷貝" << endl; } a& operator=(const a&j)//拷貝賦值運算子 { b1 = j.b1; b2 = j.b2; cout << "呼叫了拷貝賦值運算子" << endl; return *this; } virtual ~a()//解構式 { cout << "呼叫了解構式"<< endl; } public: int e(a d);//普通函式 //int e(a &d);//參考便產生影響 }; a::a(int f1, int f2 ):b1 (f1),b2(f2)//類外實作建構式、宣告時需要由默認值、定義時可以不需要默認值 { cout<<"呼叫建構式"<<endl; cout << "b1是" <<b1<< endl; cout << "b2是" << b2 << endl; } int a::e(a d)//區域物件、臨時物件(特殊的、一般臨時物件是不顯示代碼的、這是假的?)、臨時使用求和、 //int a::e(a &d)//參考便產生影響 43行 左值參考、 直接傳值、 { int q = d.b1 + d.b2; d.b1 = 100;//賦新值、修改值對外沒有影響因為是拷貝出來的、參考有影響、 return q; } //統計字符h在n中出現的次數、將次數回傳、 int k(const string &n, char h)//定義了string型別、n的形參系結到啦string臨時物件上、 { const char* m = n.c_str(); int v = 0; return v;//執行到此步驟則string臨時物件會被銷毀 } int main() { //a g; //g = 100;/*產生了臨時物件、將100給了a、 //用100來創建了一個型別為a的臨時物件、 //呼叫拷貝賦值運算子吧臨時物件里面的內容賦值給g物件 //銷毀創建的臨時物件a*/ a g = 200;/*優化56行代碼、使其呼叫一次函式、沒有臨時物件的生成、g = 200不再是賦值運算子而是定義是初始化、定義時便預留了空間、在g的預留空間中構造200、*/ char r[100] = "qwertyuiopqwertwww"; int t = k(r, 'w');//型別不匹配、char和string型別不匹配、編譯器默認構造string型別的臨時物件、 /*cout << "合是" << he << endl; cout << "b1的值" << g.b1 << endl;*/ }
-
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/180886.html
標籤:C++
上一篇:每日一題——好數對的數目
