C++隱式轉換

來源:互聯網
上載者:User

標籤:引用   iostream   調用   運算   include   ace   綜合   值傳遞   建構函式   

在C++中,隱式轉換主要涉及以下情況:

1)形參對象傳遞

此時C++需通過臨時變數將對象轉換為引用後傳遞,如:

func(A a);func(a);//轉換如下:A tmp (a);func(tmp);

2)傳回值傳遞

A func();//經編譯器轉換為:func(A &tmp);

3) 類型隱式轉換,此種情況如下:

A:A(int);A a = 2;//調用建構函式或轉換函式轉換後再賦值。

綜合測試程式如下:

/** 測試C++隱式轉換 */#include <iostream>using namespace std;class A {public:    A():m(0) {cout << "A::A()" << endl;}    A(int i):m(i) {cout << "A::A(int)" << endl;}    A(const A& a) {m = a.m; cout << "A(A a)" << endl;}    ~A() {cout << "~A::A()" << endl;}    A operator+(int i)    {        return A(this->m + i);    }    A operator=(const A &a)    {        cout << "operator = " << endl;        A b = a;        return b;    }private:    int m;};class B {public :    B() {cout << "B::B()" << endl;}    ~B(){cout << "~B::B()" << endl;}};/** * 隱式轉換有3種情況: * 1. 傳回值與形參 * 2.運算子多載 * 3.類型轉換 */A func1(A a){    cout << "func1" << endl;    return a;}void func2(){    cout << "func2" << endl;}int main(){    A a;    A b;    cout << "func1:" << endl;    func1(a);    cout << "func1(2):" << endl;    func1(2);    cout << "a + 2:" << endl;    a + 2;    cout << "end." << endl;    return 0;}

 

C++隱式轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.