社区
C++ 语言
帖子详情
请问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
打赏
收藏
请问X(int I):i(I){}和X(int I){i = I;}有啥区别??
class X { int i; public: X(int I): i(I){} // X(int I){i = I;} 这样写和上面的写法有啥区别?? ~X(){} };
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
下面程序的运行结果是: main() {
int
x,i,j; for(i=1;i<=100;i++) { x=i;
下面程序的运行结果是: main() {
int
x,i,j; for(i=1;i<=100;i++) { x=i; if(++x%20) if(++x%30) if(++x%7==0) pr
int
f("%d ",x); } } A)39 81 B)42 84 C)26 68 D) 28 70 nt x,i; //定义两个整型变量dao for(i=1;i<=100;i++) //i从1到du101循环 { x=i; //将zhii当前循环
java for 代表什么意思_for(
int
a:i)在java 编程中是什么意思
展开全部遍历数组,就和for(
int
i = 0;i < a.length; i++){} 是一32313133353236313431303231363533e59b9ee7ad9431333365653261个意思。这种有冒号的for循环叫做foreach循环,foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。foreach语句...
深入理解x+=i和x=x+i
先问一个问题 x+=i和x=x+i两个表达式是一样的吗? 很多人都认为二者是一样的,没有什么不同,只是一个是另一个的简写形式罢了, 但是这并是十分准确的,这两个表达式都是赋值表达式,一个简单的”=“赋值表达式, 另一个是复合赋值表达式。 在java中有一种隐式的类型转换,在复合赋值表达式中,自动的将其所执行的计算的结果,转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转...
【PTA—6-2多项式求值】本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑ i=0 n (a[i]×x i ) 在x点的值。
本题要求实现一个函数,计算阶数为n,系数为a[0]...a[n]的多项式f(x)=∑i=0n(a[i]×xi)在x点的值。 函数接口定义: double f(
int
n, double a[], double x ); 其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。 裁判测试程序样例: #include <stdio....
关于a[i]++和a[i++]说明
1、a[i]++:表示对当前数组元素值自增,此时可以把a[i]简单看做一个变量x,操作后,x的值加1;
int
main() {
int
a[2];
int
i = 0; a[i] = 6; a[i]++; pr
int
f("%d\n", a[i]); return 0; } 结果: 2、a[i++]:表示指向下一个数组元素值;
int
main() {
int
a[2] = {6, 8};
int
i = 0; a[i++];
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章