这个C++代码的缺陷是什么?

Kad*_*iam 0 c++

(我是C++的初学者.但我熟悉其他一些编程语言,特别是Java.)

谁能帮助我找到这个C++代码中的缺陷?

string & getFullName(string name, bool male){
    string fullName = name;
    if (male) {
        fullName = string(” Mr. ”) + fullName;
        return fullName;
    }
}
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 10

至少有三个问题:

  • 首先,您将返回对局部变量的引用.

  • 其次,没有return的时候malefalse.我的意思是,如果if块没有被执行怎么办?你的功能会回归什么?这种情况没有退货声明.

  • 第三,“Mr. ”不是字符串文字."Mr. " 是一个字符串文字.注意区别.

修复可以是这样的:

string  getFullName(string name, bool male)
{
    if (male) 
    {
        return string("Mr. ") + name;
    }
    else
    {
        return "Ms. " + name;  //No need to write even `string("Ms.")`
    }
}
Run Code Online (Sandbox Code Playgroud)

不需要局部变量.

或者干脆:

string  getFullName(string name, bool male)
{
    return (male ? string("Mr. ") : string("Ms. "))  + name;
}
Run Code Online (Sandbox Code Playgroud)

  • @DavidSchwartz你能解释一下吗? (2认同)