我想看看当我们直接使用 <、> 等运算符比较字符串时会发生什么。下面代码中的两种用法令人惊讶地给出了不同的答案。他们说话的方式不完全一样吗?
#include <iostream>
template <class T>
T max(T a, T b)
{
//Usage 1:
if (a > b) return a; else return b;
//Usage 2:
return a > b ? a : b ;
}
int main()
{
std::cout << "max(\"Alladin\", \"Jasmine\") = " << max("Alladin", "Jasmine") << std::endl ;
}
用法 1 给出“Jasmine”,而用法 2 给出“Alladin”。
最佳答案
当您使用时:
max("Alladin", "Jasmine")
相当于使用:
max<char const*>("Alladin", "Jasmine")
在函数中,您最终会比较指针。调用的结果将取决于指针的值。不能保证它是可预测的。
也许你想使用:
max(std::string("Alladin"), std::string("Jasmine"))
或
max<std::string>("Alladin", "Jasmine")
请注意,当您使用它时,某些编译器可能会选择 std::max
。您可能希望将 max
更改为 my_max
或类似的内容。
关于c++ - 使用通用比较器进行字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34847149/