请问在C++中 int a=1和int a ;a=1;区别在哪里?麻烦详细点 谢谢了

如题所述

先来个区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是简单地复制类中的每个成员。 下面看例子。 c++中初始化和赋值操作差别是很大的。 对于基本数据类型差别不大: 比如: int a = 12; // initialization, copy 0X000C to a a = 12; // assignment, copy 0X000C to a 但是对用户自定义的数据类型比如String 初始化和赋值就差别很大: 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_; }; 初始化的构造过程比较简单:先分配一个足够大的空间然后填充上数据: String::String( const char *init ) ...{ if( !init ) init = \"\"; s_ = new char[ strlen(init)+1 ]; strcpy( s_, init ); } 析构过程更简单: String::~String() ...{ delete [] s_; } 但是如果赋值操作就复杂多了: String &String::operator =( const char *str ) ...{ if( !str ) str = \"\"; char *tmp = strcpy( new char[ strlen(str)+1 ], str ); // 多了中间变量 delete [] s_; // 多了删除s_; s_ = tmp; // 多一个赋值操作!现在是指向字符的指针,如果是个大对象,效率的差别可想而知. return *this; }
温馨提示:内容为网友见解,仅供参考
无其他回答

请问在C++中 int a=1和int a ;a=1;区别在哪里?麻烦详细点 谢谢了
c++中初始化和赋值操作差别是很大的。 对于基本数据类型差别不大: 比如: int a = 12; \/\/ initialization, copy 0X000C to a a = 12; \/\/ assignment, copy 0X000C to a 但是对用户自定义的数据类型比如String 初始化和赋值就差别很大: class String ...{ public: String( co...

请问一下各位: int a; a=1;和int a=1;他们有区别吗,都是什么意思啊...
你好!!!int a; a=1;和int a=1;从一般的角度来看是一样的:即我们使用的是变量的值即a的值1 但是要是从运行的时间来看是不一样的:int a; a=1;表示首先我们声明一个整型的变量a,并没有分配空间,只是告诉编译器变量的标识符和变量的类型,此时要是我们用a的值会是一个随机数,a=1;此...

请教: c++中,const int a=1; 与 int const a=1;有什么区别?_百度...
例如不要将函数void Func1(int x) 写成void Func1(const int x)。同理不要将函数void Func2(A a) 写成void Func2(const A a)。其中A 为用户自定义的数据类型。对于非内部数据类型的参数而言,象void Func(A a) 这样声明的函数注定效率比较底。因为函数体内将产生A 类型的临时对象用于复制参数...

请问c++中 a = '1' 和 a = 1 有什么区别
a=1,直接赋值,1是整数。a='1', 1是字符类型,给整型变量赋值的时候赋得是ASCII码的值,即49。。。

C++中,int *& 与 int &* 的区别、意义及使用
int &*a 可以解释为,int类型引用 的指针(C++不允许声明 指向引用的指针)。const 是限定符 const int a; \/\/const 限定 int,即 a 是一个变量,类型为int的常量。(所以,int常量不可修改,所以a也不可修改)int const a; \/\/ const 限定 a,即 a 是一个常量,类型为int。const int *a;...

c++中,int a=1,a是个变量,但实质是什么?地址吗
确实对应着一个内存地址,一个变量就是一个内存单元,赋值为1就是往这个内存单元中写入1,内存单元有很多,c++中通过给它们起了不同的变量名来标识出具体要操作哪一个单元,但CPU实际上只能通过内存单元的地址来操作它们,所以一个变量名确实对应着一个内存地址 ...

c++中复制初始化与直接初始化有什么区别
复制初始化是从一个对象到另一个对象,直接初始化是对对象赋值!,一个是复制,一个是赋值!

...int *a三者的运算结果一样,有什么本质的区别区别。
没有,本质也是一样的。差别只是可读性。第二种写法不建议,第一种第三种看你怎么理解了。int* a;是告诉读代码的人 这是一个int型指针 int *a;是告诉读代码的人 a是一个指针 我比较倾向第一种。看你怎么理解了。。纯属个人习惯问题。

C++中定义函数时,函数的参数什么时候用int **a ?与直接用int a[]和...
二、int a[]当实参是个数组时,形参我们一般这样写int a[],也可以写成 int *a 它们所表示的意义是,传递数组的首地址到子函数中!三、int (* a)[10] 这里括号中的10不可少!这叫数组指针,即a是个指针,它的数据类型是个int[10](有10个元素的数组)。a+1 会跳过一个int[10]的空间...

c++中INT 和INT &返回有什么区别 具体点啊
int& set(){ return a;} 在第二个例子中,返回的是引用,那么,就相当于返回的是变量a的别名,就可以对该变量操作,如赋值等等。set() = 5;是正确的。但是在引用返回时得注意一个问题,就是不能返回局部变量的引用,如:int& set(){ int a;return a;} 此时就会调用出错,因为a是临时变量...

相似回答