C++初始化和賦值區(qū)別解析
C++編程語(yǔ)言中的初始化在實(shí)際編程中應(yīng)用頻繁,并且作用比較大。我們?cè)谶@里主要為大家講解了C++初始化和賦值之間的區(qū)別??梢宰尨蠹覐闹袑?duì)這兩種功能應(yīng)用有一個(gè)詳細(xì)的了解,方便將來(lái)的應(yīng)用。
對(duì)于基本數(shù)據(jù)類型差別不大:
比如:
- int a = 12; // initialization, copy 0X000C to a
- a = 12; // assignment, copy 0X000C to a
但是對(duì)用戶自定義的數(shù)據(jù)類型比如String 的C++初始化和賦值就差別很大:
- class String {
- public:
- String( const char *init ); // intentionally not explicit!
- ~String();
- String( const String &that );
- String &operator =( const String &that );
- String &operator =( const char *str );
- void swap( String &that );
- friend const String // concatenate
- operator +( const String &, const String & );
- friend bool operator <( const String &, const String & );
- //...
- private:
- String( const char *, const char * ); // computational
- char *s_;
- };
初始化的構(gòu)造過程比較簡(jiǎn)單:先分配一個(gè)足夠大的空間然后填充上數(shù)據(jù):
- String::String( const char *init ) {
- if( !init ) init = "";
- s_ = new char[ strlen(init)+1 ];
- strcpy( s_, init );
- }
析構(gòu)過程更簡(jiǎn)單:
- String::~String() { delete [] s_; }
但是如果賦值操作就復(fù)雜多了:
- String &String::operator =( const char *str ) {
- if( !str ) str = "";
- char *tmp = strcpy( new char[ strlen(str)+1 ], str );
- delete [] s_;
- s_ = tmp;
- return *this;
- }
以上就是對(duì)C++初始化和賦值之間區(qū)別的介紹。
【編輯推薦】