0

(私は C++ の初心者ですが、他のプログラム言語、特に Java には精通しています。)

この C++ コードの欠陥を見つけるのを手伝ってくれる人はいますか?

string & getFullName(string name, bool male){
    string fullName = name;
    if (male) {
        fullName = string(” Mr. ”) + fullName;
        return fullName;
    }
}
4

5 に答える 5

10
于 2012-07-12T04:52:11.933 に答える
2

ローカル変数への参照を返しています。理想的には、関数 getFullName が返されると fullName が死ぬことを意味し、次のようなものを割り当てようとすると

string myName = getFullName("Adam",true);

myNameゴミになります。

于 2012-07-12T04:49:56.120 に答える
1

local への参照を返さず、単一の左カーリーを削除します。

void makeFullName(string &name, bool male){
    if (male) /* remove the curly */
        name = string(“Mr. ”) + name;
}
于 2012-07-12T04:52:07.207 に答える
1

フルネームのスコープはこの関数のみに制限されているため、この関数が終了するかスコープ外になると、フルネームはスタックから削除されます。したがって、fullnameの参照を返すと、フラッシュされたメモリのアドレスが返されるため、ガベージ値が取得されます。もう 1 つの問題は、男性の条件が false の場合、何も返さないことです。

于 2012-07-12T04:56:01.283 に答える
0

おそらく、次のようなものがもっと必要です。

std::string getFullName(string const &name, bool male) { 
    std::string ret = "Mr. ";
    if (male)
        return ret+name;
    return name;
}

別の可能性として、選択した場合、女性の名前にタイトルを簡単に追加することもできます:

std::string getFullName(string const &name, bool male) { 
    static const std::string titles[] = {std::string(""), std::string("Mr. ")};

    return titles[male] + name;
}

女性の名前にタイトルを追加したい場合は、上記の空の文字列の代わりに挿入してください.

于 2012-07-12T04:58:10.730 に答える