1. 程式人生 > >C++ 中引用引數型別不匹配造成的編譯問題

C++ 中引用引數型別不匹配造成的編譯問題

Ros裡有個函式,介面是這樣的:

void ros::init(int &argc, char **argv, const std::string& name, uint32_t options = 0);

當按如下方式呼叫時:

int StartRos(long long argc,char ** argv)
{
    ros::init((int)argc,(char **)argv,"ewayos_rosapp");
}

       編譯會報錯,說引數型別不匹配,但是明明已經把argc強轉了啊。經過分析,原因是這樣的:當把一個long long引轉成int後,argc的確被強轉了,但是argc是個引用,引用可以理解成指標的另一種形式,強轉之後argc指的具體值還是long long 型別,這時候編譯器會檢查指向的內容是不是int。所以依然編譯不過。
總結:傳引用的時候,資料型別必須一致,否則再怎麼強轉,都是無濟於世.