共用方式為


編譯器警告 (層級 3) C4191

更新:2007 年 11 月

錯誤訊息

'operator/operation' : 從 'type of expression' 到 'type required' 不安全的轉換

幾種被視為不安全的作業 (關於函式指標):

  • 不同呼叫慣例的函式型別。

  • 不同傳回慣例的函式型別。

  • 不同大小、型別種類或分類的引數或傳回型別。

  • 區隔引數清單長度 (針對 __cdecl,僅在從一較長的清單轉換成較短的清單時,即使較短的是 varargs)。

  • 資料指標 (不同於 void*) 別名違反函式指標。

  • 其他任何可能會產生 reinterpret_cast 錯誤或警告的型別差異。

透過此種產生的指標來呼叫這個函式,可能會使您的程式造成損毀。

此警告在預設情況下為關閉的。如需詳細資訊,請參閱預設為關閉的編譯器警告

下列範例會產生 C4191:

// C4191.cpp
// compile with: /W3 /clr
#pragma warning(default: 4191)

void __clrcall f1() { }
void __cdecl   f2() { }

typedef void (__clrcall * fnptr1)();
typedef void (__cdecl   * fnptr2)();

int main() {
   fnptr1 fp1 = static_cast<fnptr1>(&f1);
   fnptr2 fp2 = (fnptr2) &f2;

   fnptr1 fp3 = (fnptr1) &f2;   // C4191
   fnptr2 fp4 = (fnptr2) &f1;   // C4191
};