c++開發的專案難免會用到stl的string,使用管理都比char陣列(指標)方便的多,但在得心應手的使用過程中也要警惕幾個小陷阱,避免我們專案出bug卻遲遲找不到原因。
直接通過乙個例子說明,下面的例子會輸出什麼:
#include #include#include
using
namespace
std;
struct
flowrecord
;
intmain()
c_str()函式用於string與const char*之間的轉換,也經常能用到,下面的例子你說輸出啥?
#include #includeusing
namespace
std;
intmain()
嗯,第乙個不用多說,第二個輸出是「alexia」還是「amexia」呢?答案是後者,咋一看const char*的值應該是個常量啊,怎麼還能改變值呢?哈,又是個經典的面試題:const char*, char const*, char* const的區別是什麼?老生常談的問題,const char*與char const*是等價的,指的是指向字元常量的指標,即指標可以改變指向但其指向的內容不可以改變,而char* const相反,指的是常量指標,即指向不可以改變但指標指向的內容可以改變。因此這裡的const char*指向的內容本類是不可以改變的,那麼這裡為什麼改變了呢?這跟str這個const char*的生命週期及string類的實現有關,string的c_str()返回的指標是由string管理的,因此它的生命期是string物件的生命期,而string類的實現實際上封裝著乙個char*的指標,而c_str()直接返回該指標的引用,因此string物件的改變會直接影響已經執行過的c_str()返回的指標引用。
直接看下面的例子:
string s("hello
");
cout
ok
cout<<"
hello
".size()error
cout<"
world
"ok
cout<<"
hello
"+"world
"error
可以看出兩者是非常不同的,不能混淆使用。
C string中的幾個小陷阱,你掉進過嗎?
c 開發的專案難免會用到stl的string,使用管理都比char陣列 指標 方便的多,但在得心應手的使用過程中也要警惕幾個小陷阱,避免我們專案出bug卻遲遲找不到原因。直接通過乙個例子說明,下面的例子會輸出什麼 cpp view plain copy include include include...
幾個笑死你的小笑話
衛生 廚房 餐後,一位顧客把飯店老闆叫了來。先生,祝賀您!您這兒的廚房很衛生啊!多謝,先生 我盡力而為。但是,我請教,您不曾參觀過我 的廚房怎麼會誇這裡很衛生呢?噢,很簡單。我剛在這兒吃的一切都有一股肥皂味。小 費 一位先生在餐館吃完飯,結帳後準備起身離去。站在一旁的侍 者見他無意付小費,忙說 先生...
Go Slice 使用中的小陷阱
go中的切片有兩個特性 type slice struct包括從切片和陣列派生出來的切片都是公用乙個底層陣列的 make構造出來的切片,已經預先填充了len個零值元素了。總而言之,對切片的更改都會影響到底層的陣列結構,因此需要慎重。動手做個實驗 package main import fmt fun...