Namaran

Code daily. Without assist.

2026-09-20

greeting_length.cpp

#include <string>

std::string make_greeting(const std::string& name);

std::size_t greeting_length() {
    // write this: call make_greeting("world"), bind the temporary it
    // returns to a local const reference (no copy of the string), then
    // return the reference's size()
}

greeting_lengthを実装してください。make_greeting("world")を呼び、その戻り値(一時オブジェクト)をconst参照でローカル変数に束縛してから、そのsize()を返すこと。

Reference
std::size_t greeting_length() {
    const std::string& msg = make_greeting("world");
    return msg.size();
}

make_greeting("world")が返す一時オブジェクトをconst std::string&で直接受けると、コピーを1つも作らずにその文字列へアクセスできます。一時オブジェクトをconst参照へ直接束縛すると寿命が参照の寿命(ここではgreeting_lengthのスコープ)まで延長されるので、msg.size()を呼ぶ時点で一時オブジェクトはまだ生きています。C++17以降はauto msg = make_greeting("world");と書いても保証されたコピー省略によりコピーは発生しませんが、const参照で束縛する書き方は「絶対にコピーを作らない」ことをコード自体が明示できる点で読み手にとって分かりやすいという利点があります。これは参考実装であり、唯一の正解ではありません。