您好,登錄后才能下訂單哦!
對string 理解構造和賦值理解不清引起的錯誤。
起因:
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*'
上述 的解釋
賦值 = 和構造函數的區別
string a=3; 調用的 是 構造函數
a=3; 調用的 是= 操作符
查看 string 官方文檔
http://www.cplusplus.com/reference/string/string/string/
構造函數:
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);
看到 “=” 分為兩種情況:
= operator
copy constructor
如果新定義一個對象,一定會調用構造函數/拷貝構造,不會調=操作,
舉例 string a="fdjhf", a 是定義,會調用其構造函數
沒有新對象定義
string a,b;a=b; 這里調用 = 操作符
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。