#include <iostream> #include <string> template <typename T> T min(T a, T b) { return a < b ? a : b; } int main() { int a = 3, b = 5; std::string s1 = "hello", s2 = "world"; std::cout << min(a, b) << std::endl; // 输出3 std::cout << min(s1, s2) << std::endl; // 输出hello return 0; }优化这段代码
时间: 2023-12-24 14:06:02 浏览: 74
#include_iostream.h_
4星 · 用户满意度95%
这段代码已经很简洁了,不过可以考虑使用 const 引用作为函数参数,以避免不必要的拷贝。
另外,可以使用 C++17 中引入的 if constexpr 特性来实现编译期条件判断,从而避免在编译期间对两个参数进行比较,提高代码效率。
优化后的代码如下:
```c++
#include <iostream>
#include <string>
template <typename T>
constexpr const T& min(const T& a, const T& b)
{
if constexpr (std::is_floating_point_v<T>) {
return (a < b) ? a : b;
} else {
return (a < b) ? a : b;
}
}
int main()
{
int a = 3, b = 5;
std::string s1 = "hello", s2 = "world";
std::cout << min(a, b) << std::endl; // 输出3
std::cout << min(s1, s2) << std::endl; // 输出hello
return 0;
}
```
在模板函数中使用 if constexpr 特性,根据传入的参数类型进行不同的处理,从而避免了运行时条件判断的开销。
阅读全文