请问X(int I):i(I){}和X(int I){i = I;}有啥区别??

kent5566 2005-01-26 04:24:36
class X
{
int i;
public:
X(int I): i(I){}
// X(int I){i = I;} 这样写和上面的写法有啥区别??
~X(){}
};
...全文
270 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
somedummy 2005-01-27
  • 打赏
  • 举报
回复
好像第一种也有可能没办法通过,如果i的类型只有一个operator=(int),而没有相应的构造函数,那么这个就玩完了
kent5566 2005-01-27
  • 打赏
  • 举报
回复
谢谢大家支持!那这两种写法的执行的顺序有没有不同呢?
tianqiqinglang 2005-01-27
  • 打赏
  • 举报
回复
同意2楼的
dudu妈 2005-01-27
  • 打赏
  • 举报
回复
举例
class A
{
public:
A(int i);
void print();
const int & r;
private:
const int a;
static const int b;
};
const int A::b=10;
A::A(int i):a(i),r(a)//常数据成员只能通过初始化列表来获得初值
{}
dudu妈 2005-01-27
  • 打赏
  • 举报
回复
如果在一个类中说明了常数据成员,那么构造函数对该数据成员进行初始化,就只能通过初始化列表
lxhlizhenhao 2005-01-27
  • 打赏
  • 举报
回复
学习!
Flex77 2005-01-27
  • 打赏
  • 举报
回复
写错了

X(int I): i(I){}
等效于:int i = I; 直接以I为参数调用构造函数

X(int I){i = I;}
等效于:int i = 0; 以默认值为参数调用构造函数
i = I; 以I为参数调用赋值操作符函数
Flex77 2005-01-27
  • 打赏
  • 举报
回复
X(int I): i(I){}
等效于:int i = I; 直接以I为参数调用拷贝构造函数

X(int I){i = I;}
等效于:int i = 0; 以默认值为参数调用拷贝构造函数
i = I; 以I为参数调用赋值操作符函数
zhengwei1984222 2005-01-26
  • 打赏
  • 举报
回复
还有继承的时候有用
fengfeng2003 2005-01-26
  • 打赏
  • 举报
回复
主要是效率方面差别
healer_kx 2005-01-26
  • 打赏
  • 举报
回复
idau7(我爱Eva) 说得很对,。、

在C++五十戒有说哦。
somedummy 2005-01-26
  • 打赏
  • 举报
回复
有的时候第二种根本就没有办法通过

譬如i是一个类的对象实例,i的类型里面有一个构造函数可以用为int的参数构造整个对象,但是却没有一个对应的operator=(int),这样的话,第二种方法根本就无法进行,编译器直接给出一个错误。
melonliu 2005-01-26
  • 打赏
  • 举报
回复
const和reference的成员变量只能用初始化表进行初始化FOO(int x):i(x){}

效率问题没有研究,学习!
idau7 2005-01-26
  • 打赏
  • 举报
回复
误人子弟。。。

X(int I):i(I){}执行的是初始化操作
X(int I){i = I;},是赋值操作。调用了对象的赋值运算符。

就该例子而言,无所谓,因为编译器会帮你优化的。而倘若是非内建型别的对象,赋值运算符的操作就会有可能降低程序效率。so,尽量使用初始化来构造对象的初始值。
yjg 2005-01-26
  • 打赏
  • 举报
回复
对于一些简单数据类型(char、int等)。如果它们是类的一般的数据成员(既不是常量的也不是引用的)那么上面两种初始化变量的方式,效果上是一样的没有区别。
但是对于数据成员是类类型(对象)的话,那么还是X(int I):i(I){}这种方式效率高。建议对类类型的成员的变量采用这种方式。
MN归来 2005-01-26
  • 打赏
  • 举报
回复
强烈建议使用i(I),无论是引用还是CONST常量,或者其他变量,这才是面向对象
beyondtkl 2005-01-26
  • 打赏
  • 举报
回复
:)
hchinside 2005-01-26
  • 打赏
  • 举报
回复
看书吧。c++ primer
dongpy 2005-01-26
  • 打赏
  • 举报
回复
引用也是
kent5566 2005-01-26
  • 打赏
  • 举报
回复
还有别的区别吗?
加载更多回复(1)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧