有条件地将std :: string分配为引用

use*_*729 1 c++

我有一些代码是正在运行的较大函数的一部分。但是,为了优化它并消除不必要的字符串复制,我想用引用重写此代码。我的代码依赖于GreaterStr是比smallStr更长的字符串。我想用引用重写它,但似乎无法正常工作。如果我尝试在没有显式初始化它们的情况下创建更大的引用和更小的引用,则编译器会告诉我需要在声明时对其进行初始化。如果我尝试将其作为if语句中的临时变量,则最终两个变量都引用同一字符串。

最好的解决方案是什么?

//str1 and str2 are std::strings
std::string largerStr, smallerStr;

if(str1.length() > str2.length()) {
    largerStr = str1;
    smallerStr = str2;
} else {
    largerStr = str2;
    smallerStr = str1;
}
Run Code Online (Sandbox Code Playgroud)

Kam*_*Cuk 5

您可以使用三元运算符对其进行初始化。

#include <string>    
int main() {
    std::string str1, str2;
    const bool str1_longer = str1.length() > str2.length();
    std::string& largerStr  = str1_longer ? str1 : str2;
    std::string& smallerStr = str1_longer ? str2 : str1;
}
Run Code Online (Sandbox Code Playgroud)