c++ - 使用通用比较器进行字符串比较

标签 c++ string

我想看看当我们直接使用 <、> 等运算符比较字符串时会发生什么。下面代码中的两种用法令人惊讶地给出了不同的答案。他们说话的方式不完全一样吗?

#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/

相关文章:

c++ - 如何在 WinCE 中创建 .bmp

c++ - 如何删除正在运行程序的 Win32 桌面,并终止这些程序?

c++ -/usr/bin/time 是如何衡量内存使用情况的?

java - Java中将字符串数组解析为Arraylist

java - 字符串操作java

c++ - 在 C++ 的标准模板库中使用 merge() 函数时出现奇怪的输出

c++ - 我是否错误地使用了 atoi?

python - 输入字符串列表 Python

java - 如何使用 Jax-RS 返回 Java List<String> Json

python - 字符串中重复的字符