C++ 中的奇怪行为

0 c++ c++14

template <typename T> T& larger(T& a, T& b)
{
    return (a>b?a:b);
}


 std::string first {"vv"};
 std::string second {"That is the question in californian"};


 int main(){
 std::cout << larger(first,second) << std::endl;
 }
Run Code Online (Sandbox Code Playgroud)

这应该返回 [if a 大于 b , then a , else b ]; 但它为我返回了一个。(“vv”)这里出了什么问题>

Seb*_*ann 5

operator<按字典顺序比较std::string. 这意味着它逐个字符地比较,从第一个开始,并且仅当它们相等时,才比较下一个。

正如您可以轻松验证的那样,它认为'v' > 'T'. 这是因为在 ASCII 编码中,小写字母大写字母之后