5.(1)编写一个函数,输入两个字符串的引用,返回字符串长度较小的那个字符串的引用 (2)编写该函数的内联函数版本,并测试两种函数的运行速度差别。 (3)如果输入的两个字符串是常量字符串, 尝试编写该函数的constexpr版本, 并测试两种函数的运行速度差别.
时间: 2024-10-19 17:08:28 浏览: 21
好的,让我们来解答你的问题。
### (1) 编写一个函数,输入两个字符串的引用,返回字符串长度较小的那个字符串的引用
```cpp
#include <iostream>
#include <string>
std::string& shorterString(std::string& str1, std::string& str2) {
return (str1.size() < str2.size()) ? str1 : str2;
}
```
### (2) 编写该函数的内联函数版本,并测试两种函数的运行速度差别
```cpp
inline std::string& inlineShorterString(std::string& str1, std::string& str2) {
return (str1.size() < str2.size()) ? str1 : str2;
}
int main() {
std::string a = "Hello";
std::string b = "World!";
std::cout << "Shorter string: " << shorterString(a, b) << std::endl;
std::cout << "Shorter string using inline: " << inlineShorterString(a, b) << std::endl;
return 0;
}
```
在大多数现代编译器中,内联版本的函数通常比非内联版本的函数运行速度更快,因为内联函数减少了函数调用的开销。然而,这种差异在如此简单的函数中可能不太明显。
### (3) 如果输入的两个字符串是常量字符串, 尝试编写该函数的constexpr版本, 并测试两种函数的运行速度差别
```cpp
constexpr const char* constexprShorterString(const char* str1, const char* str2) {
return (std::char_traits<char>::length(str1) < std::char_traits<char>::length(str2)) ? str1 : str2;
}
int main() {
const char* a = "Hello";
const char* b = "World!";
std::cout << "Shorter string: " << constexprShorterString(a, b) << std::endl;
return 0;
}
```
`constexpr`函数在编译时计算结果,因此其运行速度通常比运行时计算的函数更快。不过,由于这个例子中的字符串操作相对简单,性能提升可能并不显著。
阅读全文