c****o 发帖数: 1280 | 1 Can any Daniu explain when to use "const & " in c++ generally, what are the
pros and cons? I got screwed up with it quite often, really frustrated.
What is the point for the return value of a function to be const &?
Thank You! |
g**u 发帖数: 583 | 2 写说几句,等daniu拍砖。
const &中的 &是告诉编译器,传递的是变量地址,而不是变量的copy,换句话说如果
函数里面改变了该变量的值的话, 函数返回是改变量的值也被改变;但是如果前面加
上const的话,那么编译器在编译的时候会检查传进来的值在函数体内是否会被修改,
如果修改的话,以出现compile error。。。
至于函数返回const &,那么该函数的返回值不能做l-value.... |
x******7 发帖数: 49 | 3 传递 const & 支持参数的隐式转换。能将一个基本类型转换为一个对象。 |
i**********e 发帖数: 1145 | 4 class Foo {
// bla bla bla
};
class A{
public:
Foo foo1() {
return x;
}
const Foo &foo2() {
return x;
}
private:
Foo x;
};
通常没必要的话直接返回 Foo object 就可以了。
返回 const Foo & 主要是在以下的情况:
Foo x = A().foo2();
避免不必要的两次 copy(例如:A().foo1())。但是现在的编译器都很聪明,A().foo1
() 这种情况也只 copy 一次。
还有一种情况返回 const Foo & 的目的就是避免以下奇怪的情况:
(A().foo2() = x) = y;
如果 foo2() 的返回值定义为 Foo & 就反而会编译通过。
想想看 assignment operator 的返回值你就知道我在说什么意思了。在 primitive
type 里:
int x, y, z;
(x = y) = z;
虽然以上的含义很多人都搞不懂,但是语法是对的。
简单来说,在你自己定义的 user type,如果要避免这种情况 (x=y)=z,那就返回
const Foo &.
如果要与 primitive type 一样允许 (x=y)=z,那就返回 Foo &.
一些常见面试题的答案与总结 -
http://www.ihas1337code.com |