C 在宣告const常量字串時,更常用string類還是更常用char 呢?

時間 2021-12-19 16:54:05

1樓:將子山

當然是std::string_view。

當然你如果說的是constexpr std::string,那不好意思還不支援。

2樓:Ninsun

常量的話……用char*本身是沒啥毛病的……你甚至搞成巨集定義都不一定會有問題。

但是如果你的所有介面接受的字串都是string型別的(大概率),那還是用string吧。

3樓:王超逸

俺樸素的覺得:const string& 挺好的,string可以很方便的轉化成c風格的字串來呼叫c的介面。但是c風格的字串轉化成string就少不了一遍複製。

至於string_view。聽起來似乎不錯,俺去了解一下

4樓:zr scat

介面部分用const char *

其他部分看你自己段位,越是接近現代語言思路的越應該用std::string &,但是不管怎麼說,要保持一致性,比如這個地方輸入引數不用指標了,其他地方輸入引數也應該避免使用指標。

5樓:NecoKeine

TL;DR 按照google code style: char* 是正解。

我試著翻譯一下原文:

在靜態儲存區域(static storage duration)的物件,必須是能夠被平凡析構(trivially destructible)的。也就是說,析構函式不做任何事,包括父類/子類的析構函式也不做任何事。更進一步說,它意味著這個型別沒有使用者定義的或者虛擬的析構函式,並且所有的基類和非靜態成員也都可以簡單破壞的。

吧啦吧啦……

簡而言之呢,就是google覺得所有的常量應該是基礎型別比如char*,std::string這種定義類絕對是不被接受的。主要是為了防止一些奇怪的錯誤,這些錯誤一般會在常量類的初始化和析構過程當中出現。

一家之言,不喜勿噴。

Google C++ Style Guide

6樓:freeman

如果你要安全性和便捷性,那麼應該const string&或者 string_view。

如果你要效率或者與C介面相容,那麼可以用const char*。

選擇你認為合適的就可以了。

7樓:exiledkingcc

看這個字串使用的時候,是作為const char*傳參,還是const std::string&傳參。如果只有前者,那麼直接使用constexper auto a = "...

";就行。如果有後者,那麼定義的時候就用const std::string 。

8樓:

如果某段字串行永遠都沒有改動的必要,則利用字串字面量去儲存,並使用const char*型指針對單個字元進行讀操作。

例如,在某段文字之中查詢首個英文本母時,可能需要利用「由全部大小寫英文本母所構成」的一段字串行作為查詢函式的實參。注意,這段字串行永遠都沒有改動的必要,所以可以如下:

const

char

*lettersEnglish=""

;//英文本母

其它場合,使用string類應該可以更靈活一些。

9樓:xyc

string view 你值得擁有具有迭代器以及stl容器那套操作

至於cpp版本問題 cpp只有乙個版本就是目前最新的這個

C語言中,字串常量為什麼只能給字元陣列初始化,而不能通過指標賦值

程佳 陣列是指標常量,常量不能賦值。字串在c語言裡不是原生資料型別,就是乙個內容非0結尾為0的位元組陣列。所以對字串的操作要使用string.h裡那些庫函式。 神念的經 想啥呢,一旦定義成了靜態陣列,首元素位址就是定死的。想改位址?門都沒有。指標賦值?那是改指向的位址,不是改指向的內容。strcpy...

C語言中用指標宣告字串在部分系統下執行有問題?

執行報錯很正常,在windows下如果你用vc編譯的話也會執行報錯,因為這是已初始化的資料,被放在所謂的靜態儲存區,預設在PE檔案的.rdata區段,這個區段是可讀取不可寫入的,寫入肯定會非法訪問。可以根據 余天公升的方法將字串放在棧裡,但是如果你一定要這麼做的話,那就在加上 pragma comm...

C語言字串長度函式?

C語言答疑課堂 題主的問題有兩個地方需要回答 1.為什麼寫 c 100 會報錯?你看啊,陣列c定義的時候指定大小是100,這可不是意味著從1 100,而是0 99,C語言數字下標是從0開始的。對於我們來說,是不是有點不習慣?c 100 意味著第101個元素,這個元素並不在陣列裡,鬼才知道你是個什麼東...