linux、windows中string的區別

 
  1. string a("aaaa"); 
  2. string b; 
  3. b = a
  4. const char* p1 = a.c_str(); 
  5. const char* p2 = b.c_str(); 
  6. if (p1 == p2) 
  7.     printf("true"); 
  8. else 
  9.     printf("false"); 
 
以上代碼在windows輸出false,在linux輸出true.
原因就是因爲linux下用的是寫時拷貝,所以當編譯器在賦值並不分配內存,而且a和b公用同一份內存。當調用string中的函數改變b時,才分配內存。
注意是通過string的函數,如果用b.c_str()獲得的指針強制修改b,因爲這種修改繞開了寫時拷貝,a和b公用的同一份內存,所以a也改變。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章