您的位置:首页 > 移动开发 > Objective-C

More Effctive C++ Item19 (Understand the origin of temporary objects)

2007-09-05 23:12 423 查看
临时对象会在两种情况发生:

1 调用函数发生隐式类型转换

size_t countChar(const string& str, char ch);

char buffer[MAX_STRING_LEN];
char c;

// read in a char and a string; use setw to avoid
// overflowing buffer when reading the string
cin >> c >> setw(MAX_STRING_LEN) >> buffer;

cout << "There are " << countChar(buffer, c)
<< " occurrences of the character " << c
<< " in " << buffer << endl;
为了消除const char*(buffer的类型)和 const string&(str的类型)之间的差别,需要创建一个临时的string类型的对象

void uppercasify(string& str);

char subtleBookPlug[] = "Effective C++";

uppercasify(subtleBookPlug);                // error!

为什么函数调用失败呢?因为无法创建一个临时的string对象。

假设这里允许创建一个临时的string对象,str发生改变时,临时对象发生改变,

但字符串subtleBookPlug没有按照编程者意图发生改变。

但用const string& 就不会出现这个问题。

2 函数返回对象时

const Number operator+(const Number& lhs,
const Number& rhs);

函数的返回值即是一个临时对象。

对于大多数函数,没有办法在概念上避免临时对象的构造函数和析构函数的调用,但通过现实中

一些优化方法可以解决这类问题。

具体的优化方法在下一章介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: