對於 C 中的輸入引數,使用 const string 還是 const char 好?

時間 2021-05-31 10:50:03

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,有操...