標籤:引用 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++隱式轉換