Temporary Objects

来源:互联网 发布:h3c 无线mac地址认证 编辑:程序博客网 时间:2024/06/11 01:42
string FindAddr(list<Employee> emps, string name) // const &, string& dangerous.{// for most containers, calling end() returns a temporary object that must be constructed and detroyed.for(list<Employee>::iterator i = emps.begin(); i != emps.end(); i++)// emps.end(). i++{if( *i == name ) // implicit conversions. string to Employee?{return i->addr;}}return "";}const T T::operator++(int){T old(*this);++*this;return old;}const string& FindAddr( /* pass emps and name by reference */ ){for( /* ... */ ){if( i->name == name ){return i->addr;}}static const string empty;return empty;}string& a = FindAddr(emps, "John Doe"); emps.clear();  // if emps is cleared. then, it not exist. and a is null.cout << a; // errorstring FindAddr(const list<Employee>& emps, const string& name) {list<Empoyee>::const_iterator iend(emps.end());for(list<Employee>::const_iterator i = emps.begin(); i != iend; ++i){if(*i->name == name) // implicit conversions. string to Employee?{return i->addr;}}return "";}string FindAddr(const list<Employee>& emps, const string& name){list<Empoyee>::const_iterator i(find(emps.begin(), emps.end(), name));if (i != emps.end()){return i->addr;}return "";}