level 10
一直没有一个确切的概念:
什么时候 传递参数时才应该使用 const T &.
只知道 传递大的对象时, 为了避免临时变量 生成 及copy, 使用 const T & rhs. 但是多大的对象才算是大对象呢? 如果类中只有一个 char c 成员变量 , 需不需要?
还有, 之前在哪看到过 & 是用指针实现的(不知道对不对, 先假设是这样), 如果 指针 是 4字节的话, 是不是 凡是 小于4字节的类型 就不应该 const T &, 而直接 T ,
像这样:
int Fn (short size);
int Fn (char c);
如果是这样的话, 那 double 类型呢? sizeof (double) >= sizeeof (void *)
应该是除了占用 空间之外 还要考虑 临时变量的建立之类的吧.
但是难道就没有一个标准吗?
凡是 内建类型 就 T, 自定义类型就 const T & ?
如果是这样的话, 如果 我对 char 也使用 const,
像这样传递, const char & c , 性能 什么的会有什么影响 ?
请大家指点.. 谢.
2013年11月06日 02点11分
1
level 10
当T是一个类,涉及到一系列构造析构的时候就算大了,具体要说到什么时候才算大,这个不太好说。
但是既然加个&号也不是什么麻烦事,不如养成这种比较好的习惯。
2013年11月06日 02点11分
3
只是不知道 int 类型, 用哪种方式好一些?
2013年11月06日 03点11分
level 13
1、既然使用引用是避免复制副本,那么无论原对象是多大(比如一个字节),都会减少对空间需要,因为原对象+副本都会比原对象大
2、多大的对象才算是大对象,这个没有定论,具体看你执行什么操作。
2013年11月06日 03点11分
5
多谢 兄弟 指点 .
2013年11月06日 03点11分
level 9
为了能传入一个 1 而不是一个 a=1 之后的 a
2013年11月06日 03点11分
6
不是很明白 兄弟的 含意.
2013年11月06日 03点11分
回复 leesunshine007 :大概明白了, 你是说传入的是原值而不是临时变量 a , 对吧. 这个我明白. 这么说吧, 如果 我对 char 类型的, 也这样传参, const char & c, 请问 比起 char c 有什么劣势? 是没有必要, 还是 对于内建类型而言 就是不好?
@wsfxzxb
2013年11月06日 03点11分
回复 leesunshine007 :一个c不能赋值 一个c可以赋值 不是一回事 无法比较
2013年11月06日 03点11分
回复 我是不是师兄 : 假设我的需要就是 函数只需要传入一个 只读的 字符. 我只是想让大家指点一下 两种不同方式 对于 内建类型 空间和时间上的比较...
2013年11月06日 03点11分
level 13
1、避免传入的参数在函数内部改变
void set (const string& str)
{
。。。。
str="12";
}
2013年11月06日 03点11分
9
这个 OK, 明白.
2013年11月06日 03点11分
level 13
2、扩大参数适用范围
void set (string& str)
{
.....
}
int main()
{
const string str="123"; // 不行
set(str);//set("123")也不行
return 0;
}
//////////////////////反过来可以//////////////////////
void set (const string& str)
{
}
int main()
{
string str="123";
set(str);
return 0;
}
2013年11月06日 04点11分
10
这个也理解. 谢谢. 从兄弟的意思中我似乎感觉到. 如果 我的确需要传入一个不可变的值的话, 用 const & 这种好像好一些... 平时在代码中我有个趋势. 就是对int 的传参也会 用 const int &(只要可以用, 意思是满足需求)...所以上来求教一下 是不是 对于 内建类型 有什么缺点.... 明白了.
2013年11月06日 04点11分
level 13
3、有些对象不能复制
ofstream print(ofstream); // 打印函数:参数复制
out2 = print(out2); // 错误: 不能复制流对象
2013年11月06日 04点11分
11
这个也明白. 谢!
2013年11月06日 04点11分
回复 leesunshine007 :把《C++Primer》看完,这些就全部明白了。。。。话说我今天好闲。。。
2013年11月06日 04点11分
回复 wsfxzxb :哈哈, 看来我看得还是不行. 似懂非懂. 其实我4版看了2遍多, 3版看了1遍多, 现在在看5en. 但是每次看, 每次总有收获.. 这就说明 还有很多 不懂的 驱动着我继续学习... 今天多谢 以上几位了... 学到很多.
2013年11月06日 04点11分