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個元素,這個元素並不在陣列裡,鬼才知道你是個什麼東...