最佳實踐:C#項目轉C++項目

最近在把一個C#項目轉到C++項目,下面整理下C#和C++不同的地方,給各位個參考,避免入坑:

1)默認對象賦值方式不同,所以修改時要多加註意。具體參考 https://bbs.csdn.net/topics/392440547

2)類的變量默認值不同 .net默認是類型的默認值,C++沒有默認值的。要避免C++的類成員沒有默認值的意外行爲。

3)a[i][j]和a[i,j]是不相同的。

4)VS2013 C++程序的默認堆棧大小爲1MB,太小,有時候會堆棧溢出,可以參考 https://blog.csdn.net/feeltouch/article/details/9400095

5)std::remove不能從vector中移除元素,需要配合erase使用。

6)VS2013C++工程調試時看不到局部變量的值:設置問題項目右鍵屬性打開後--Configuration Properties --->c/c++ ---->  Optimization下面選擇第一項選Disabled(/od)

7)C++浮點數在計算過程中保留有效數字,可以使用如下代碼,但是耗時較多

double round(double number, unsigned int bits) {
    stringstream ss;
    ss << fixed << setprecision(bits) << number;
    ss >> number;
    return number;
}

8)C#項目怎麼來調用C++的動態庫:

這裏的result是C++動態庫傳出的參數,在C#裏面用StringBuilder來接受,在C#裏面調用GetProvincePrice時,提前給StringBuilder申請好空間。

bool GetProvincePrice(char * param_string, char * result);
[DllImport("CPlusPlus.dll", EntryPoint = "GetProvincePrice", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
        public extern static bool GetProvincePrice(string exlist, StringBuilder result);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章