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; // error
string 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 "";
}
Temporary Objects
最新推荐文章于 2018-12-10 06:41:56 发布