typedef unsigned charbyte
;void ****me(byte& byvalue); //
其他人的介面
//我現在來呼叫
const
byte byvalue = 11
;****me(byvalue);
//編譯錯誤
****me(const_cast(byvalue)); //
編譯錯誤
****me(reinterpret_cast(byvalue)); //
編譯錯誤
****me((byte)(byvalue)); //
vs2008下通過,gcc編譯錯誤
找到了兩篇介紹的文章:
c++函式, 對非const引用引數不允許做型別轉換,例如:void update(float&i);
void g(double d, float
r)乙個void函式可以將另乙個void函式作為它的return語句中的表示式,例如:
void g(int*p);
void h(int*p)
函式過載只過載引數型別和引數個數,不過載返回型別
在不同的非名字空間作用域裡宣告的函式不算是過載,例如:
void f(int
);void
g()在同乙個作用域中隨後的宣告裡,預設引數都不能重複或者改變,例如:
void f(int x = 7
);void f(int = 7); //
錯誤,預設引數不能重複
void f(int = 8); //
錯誤,預設引數不能改變
void f(int); //
可以,函式可以重複宣告
void
g()void error(string
s);void(*f1)(string) = &error; //
可以void(*f2)(string) = error; //
也可以,與&error意思一樣
void
g()巨集名字不能過載,而且巨集預處理器不能處理遞迴呼叫
##巨集運算子可以拼接兩個串,構造出乙個新串,例如:
#define name2(a,b) a##b
intname2(hack,cah)();將產生int hackcah();
#undef x保證不再用稱為x的有定義的巨集--無論在此指令之前有還是沒有。
標準規定了只有const &才可以引用臨時物件。你的強制轉換實際上是產生了臨時物件的
如果是強轉的話會產生臨時變數,也就是右值,右值不能賦值給& ,只能賦值給const &看來事這個原因了,我用的vs2005沒產生錯誤,看來標準支援的並不好
看來是同型別轉換,編譯做了優化處理,並沒有做轉換過程
C 引用型別作為函式引數時
在 本文的主題之前,先來介紹下c 中的值型別和引用型別 眾所周知c 中有值型別和引用型別,值型別有基礎資料型別 諸如int,double,bool等 結構體 列舉,引用型別有介面 類 委託。值型別全部在作業系統的棧空間中申請,而引用型別則在作業系統的堆空間中建立物件,然後在棧空間中申請乙個指標指向這...
C 引用型別作為函式引數時
在 本文的主題之前,先來介紹下c 中的值型別和引用型別 眾所周知c 中有值型別和引用型別,值型別有基礎資料型別 諸如int,double,bool等 結構體 列舉,引用型別有介面 類 委託。值型別全部在作業系統的棧空間中申請,而引用型別則在作業系統的堆空間中建立物件,然後在棧空間中申請乙個指標指向這...
C 引用型別作為函式引數時
在 本文的主題之前,先來介紹下c 中的值型別和引用型別 眾所周知c 中有值型別和引用型別,值型別有基礎資料型別 諸如int,double,bool等 結構體 列舉,引用型別有介面 類 委託。值型別全部在作業系統的棧空間中申請,而引用型別則在作業系統的堆空間中建立物件,然後在棧空間中申請乙個指標指向這...