文章目录
- 查看普通函数的实现
- 查看泛化函数的实现
-
-
-
- 1. `int max(int, int);`
- 2. `int max(const int*, const int*);`
- 3. `int max(int&, int&);`
- 4. `int max(const int, const int);`
- 5. `int max(const int* const, const int* const);`
- 6. `int max(const int&, const int&);`
- 7. `int& max(int&, int&);`
- 8. `int* max(int*, int*);`
- 9. `const int* max(const int*, const int*);`
- 10. `int& max(const int&, const int&);`
- 注意事项
-
-
函数的不同修饰
![[Pasted image 20240810175052.png]]
int max(int a, int b) {
return b < a ? a : b;
}
对于一个普通函数而言,如果对参数和返回类型修饰存在如下形式:
int max(int, int);
int max(const int*, const int*);
int max(int&, int&);
int max(const int, const int);
int max(const int* const, const int* const);
int max(const int&, const int&);
int& max(int&, int&);
(确保不返回临时引用,不安全)int* max(int*, int*);
(确保指针非空)const int* max(const int*, const int*);
(确保指针非空)int& max(const int&, const int&);
(确保不返回临时引用,不安全)int max(const int&&, const int&&);
(万能引用)
不要返回临时对象的引用,不要传入和返回空指针
- 不要返回临时对象的引用:在某些编程语言中,如C++,临时对象是那些在表达式求值后不再需要的对象,它们通常在表达式结束时被销毁。返回对这些临时对象的引用可能会导致悬挂引用(dangling reference),因为引用的对象可能已经不存在了。
- 不要传入和返回空指针:在许多编程语言中,空指针是一个不指向任何有效内存地址的指针。使用空指针可能会导致程序崩溃或未定义行为。因此,避免传递空指针给函数,以及从函数返回空指针是一个不安全的做法。
模板函数的不同修饰
对于一个函数模板而言,对参数和返回值类型进行修饰也是相似的,仅仅是将 特别指定的 类型 int
泛化为一个 模板参数类型 typename T
int max(int, int);
template<typename T>
T max(T a, T b);
int max(const int*, const int*);
template<typename T>
T max(const T* a, const T* b);
int max(int&, int&);
template<typename T>
T max(T& a, T& b);
int max(const int, const int);
template<typename T>
T max(const T a, const T b);
int max(const int* const, const int* const);
template<typename T>
T max(const T* const a, const T* const b);
int max(const int&, const int&);
template<typename T>
T max(const T& a, const T& b);
int& max(int&, int&);
template<typename T>
T& max(T& a, T& b);
int* max(int*, int*);
template<typename T>
T* max(T* a, T* b);
const int* max(const int*, const int*);
template<typename T>
const T* max(const T* a, const T* b);
int& max(const int&, const int&);
template<typename T>
T& max(const T& a, const T& b);
int max(const int&&, const int&&);
(万能引用)
template<typename T>
T max(T&& a, T&& b);
修饰带来的功能上的变化
对于在原有函数上面的修饰,会影响他们的功能,比如:
原始版本