1

次のコードにダングリング リファレンスがあるのはなぜですか? const への参照は、一時的なオブジェクトの有効期間を常にそのスコープまで延長すると考えていました。

boost::filesystem::recursive_directory_iterator it(dir_name);
const std::string& extension = it->path().extension().string();
std::cout << extension << std::endl; // error, dangling reference
4

2 に答える 2

13

ドキュメントからclass path

返すと記述されているメンバー関数は、返すconst stringことが許可されていますconst string&

したがって、string()実際に一時的な文字列が返されるという保証はありません。pathによって返される一時的な文字列への参照である可能性がありますextension()。ローカル参照に直接バインドされていないため、有効期間が延長されません。

于 2013-09-05T11:27:10.307 に答える
2

extensionconst refを作成しないでください。代わりにこれを行います:

const std::string extension = it->path().extension().string();
于 2013-09-05T11:22:01.397 に答える