溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

string 構(gòu)造函數(shù),=,整數(shù) 賦值給 string 引起的 坑

發(fā)布時間:2020-05-27 19:49:35 來源:網(wǎng)絡(luò) 閱讀:819 作者:qdqade 欄目:編程語言

對string 理解構(gòu)造和賦值理解不清引起的錯誤。

起因:

string a;

int i=1;

a=i;//不報錯,不警告


int c=330;//大于256

a=c;//不警告,不報錯


a=330;//warning: overflow in implicit constant conversion


string str=3;// error: invalid conversion from 'int' to 'const char*'

string str(3);// error: invalid conversion from 'int' to 'const char*'


上述 的解釋


賦值 = 和構(gòu)造函數(shù)的區(qū)別


string a=3; 調(diào)用的 是 構(gòu)造函數(shù)


a=3; 調(diào)用的 是= 操作符


查看 string 官方文檔

http://www.cplusplus.com/reference/string/string/string/


構(gòu)造函數(shù):

default (1)
string();
copy (2)
string (const string& str);
substring (3)
string (const string& str, size_t pos, size_t len = npos);
from c-string (4)
string (const char* s);
from sequence (5)
string (const char* s, size_t n);
fill (6)
string (size_t n, char c);
range (7)
template <class InputIterator>
  string  (InputIterator first, InputIterator last);


賦值 =:

string (1)

string& operator= (const string& str);

c-string (2)

string& operator= (const char* s);

character (3)

string& operator= (char c);


看到 “=” 分為兩種情況:

  1. = operator 

  2. copy constructor


如果新定義一個對象,一定會調(diào)用構(gòu)造函數(shù)/拷貝構(gòu)造,不會調(diào)=操作,

舉例 string a="fdjhf", a 是定義,會調(diào)用其構(gòu)造函數(shù)


沒有新對象定義

string a,b;a=b; 這里調(diào)用 = 操作符

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI