C++中有幾種主要的函數(shù)調(diào)用約定,它們決定了如何以及在何處函數(shù)的參數(shù)被傳遞。以下是C++中常見的函數(shù)調(diào)用約定:
cdecl(C Declaration):
void cdecl func(int a, int b);
stdcall(Standard Call):
ret
指令自動(dòng)彈出參數(shù))。void stdcall func(int a, int b);
fastcall:
void fastcall func(int a, int b);
thiscall:
this
指針作為隱藏的第一個(gè)參數(shù)傳遞給成員函數(shù)。thiscall
。class MyClass { void myMemberFunc(int a, int b); };
vectorcall:
stdcall
,但具有不同的對齊和傳遞規(guī)則。void vectorcall func(int a, ...);
需要注意的是,調(diào)用約定不僅影響參數(shù)的傳遞方式,還可能影響函數(shù)的返回類型、異常處理、命名約定等方面。因此,在跨平臺編程或編寫庫代碼時(shí),明確指定和遵循調(diào)用約定是非常重要的。
另外,C++標(biāo)準(zhǔn)庫中的函數(shù)通常遵循特定的調(diào)用約定,這些約定對于保證庫的互操作性和穩(wěn)定性至關(guān)重要。例如,C++標(biāo)準(zhǔn)庫中的許多函數(shù)在Windows平臺上默認(rèn)使用stdcall
調(diào)用約定。