1樓:nevermore
想太多,就這種簡單的型別轉換,cpu一秒鐘能做幾百萬次,壓根不影響效能。程式開發的時候放在第一位的一定是健壯性,你要相信編譯器+標準庫一定比你水平高,用string自動管理記憶體一定比你用裸指標char*更安全,還能讓你後期除錯的時候節省不少頭髮
2樓:餘朔鈺
看業務場景了。
對於client來講,效率並不是那麼重要,用string傳遞資訊,多一點記憶體也是可以接受的。畢竟c端業務比較重要。
對於server來講,一般字串都是出入庫使用,對於效率和記憶體使用要求比較高,所以一般用指標。
3樓:lhrbu
都不好用,用(const.char* ptr, size_t length); 注意可能的情況下不要用strlen之類的函式去讀取字串的長度。
4樓:「已登出」
3、如果同時會被C語言和C++語言呼叫,推薦你使用const std::string&。
4、在該函式中,如果使用const char * ,那麼需要判斷指標是否為空,如果使用 const std::string& 則不需要判斷 std::string的有效性,所以使用const std::
string&更好。
個人建議,僅供參考。
個人blog https://www.
5樓:據說他姓feng
一般來說,如果這個方法有下列幾個需求之一,用const char*是比較保守的方法:
1、提供C版本的介面
2、提供到其他語言的介面
3、被編入動態鏈結庫
4、被跨執行緒、跨程序呼叫
如果只作為內部函式,兩個方法區別不至於引起質變。
6樓:zhtz
當然用 char const * 啦!
因為你在函式裡面還要把它傳給類似 printf 之類使用 C 風格字串的函式,那麼 std::string_view 就不能用了。剩下 std::
string const & 和 char const *,std::string const & 可能會臨時構造乙個影響一丟丟效能,那就只剩下 char const * 了。用 char const * 唯一不好的地方在於呼叫者如果擁有的是 std::
string 需要多寫個 .c_str(),感覺不太舒服。不過我們可以這樣:
void
foo(
char
const*s
)void
foo(
std::
string
const&s
)這樣就對呼叫者非常友好了。
7樓:Bing
如果引數是乙個不包含'\0'的字串的時候,2者沒有區別,否則用string.
2. 要防止引數生成臨時變數導致效能下降。所以,你如果使用const std::string& , 你直接傳遞 const char*的話,就會產生臨時副本。
你要綜合考慮上面三點。
8樓:MashPlant
如果這個字串會被儲存下來,例如作為建構函式的引數,建議使用std::string或者std::string &&,這兩者還會有一些細微的效能差異,我不想糾結了。
否則,即這個字串是唯讀(因為題目中已經用const限定了),那麼這兩種都不合適,推薦std::string_view。但是需要注意std::
string_view不能直接傳入接受C風格字串的介面,因為它不保證以'\0'結尾,如果有這個需求的話,最好在文件中寫出。
python中輸入函式的引數是什麼作用?
Bu.xing 感覺你問的是python中的input 函式。input 函式的功能之一是為使用者創造一種控制程式走向的選擇權力,此時其引數的作用多用於提示性的文字引數,示例如下 print 您想要什麼飲料?a.咖啡 b.奶茶 inpu input 請您做出選擇 a b if inpu a prin...
為什麼我這樣使用C 中的initializer list,在g 可以得到輸出而在msvc中不可以?
機犬 std initializer list 這東西雖然是在庫里提供的,但實現完全看編譯器怎麼開洞,大部分情況下值都在棧上,G 可能會直接指向靜態儲存區,我就遇到過 VC 爆棧 G 沒事的情況,就當成有型別的 va list 用好了,常量或是比較大的容器初始化資料還是選 std array 吧。 ...
Java中的類和c 中的類,在使用中要理解?
Lieu 長文慎入,內含 星際 穿越 我覺得這是乙個程式語言設計的問題,也是個空間緯度的問題.很有意思.還沒接受過科班的CS的訓練,程式設計經驗僅限J2EE的前後端,拋磚引玉,談談自己的思考.二維世界 我認為程式語言的基本元素是操作符和變數,而通過操作符操作變數這一行為即乙個語句.比如有變數a,有操...