2
我正在查找std::map
中的密鑰值。我碰到下面的錯誤數據集::的getProperty()內:std :: map :: at返回警告「返回引用臨時」在調用棧的某處
returning reference to temporary [-Wreturn-local-addr]
凡在調用堆棧是臨時產生的?我認爲std::map::at
返回了一個左值的引用,並且因爲我不斷返回reference-to-const
原始調用者將有一個左值的引用。
數據集
class Dataset
{
private:
PropertyCollection properties;
public:
const std::string & getProperty(const std::string & key) const;
...
}
const std::string & Dataset::getProperty(const std::string & key) const
{
// WARNING: returning reference to temporary [-Wreturn-local-addr]
return properties.getProperty(key);
}
PropertyCollection
class PropertyCollection
{
private:
std::map<std::string, std::string> properties;
public:
const bmd2::string & getProperty(const bmd2::string & key) const
...
}
const std::string & PropertyCollection::getProperty(const std::string & key)
const
{
try {
return properties.at(key);
} catch (std::out_of_range & e) {
...
}
主
int main() {
...
std::string key ("Cats");
std::string value = dataset.getProperty(key);
}
假設是'bmd2 :: string'和'std :: string'不是同一類型,我想。 –
啊,隱式轉換!是的,它們不是同一類型。感謝你抓住這個Paranaix。 –