Template Classes
Template Classes
语法的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//mypair.h
template<typename First, typename Second> class MyPair {
public:
First getFirst();
Second getSecond();
void setFirst(First f);
void setSecond(Second f);
private:
First first;
Second second;
};
//mypair.cpp
#include “mypair.h”
template<class First, typename Second>
First MyPair<First, Second>::getFirst(){
return first;
}
Member Types
例如,如果你有一个模板类或者函数,需要一个指向某种类型的指针作为迭代器,你可以使用这样的语法来定义一个通用的迭代器别名。这样,你可以在不同的上下文中使用iterator
,而不用关心具体的指针类型
1
2
3
4
5
6
7
8
9
10
//vector.h
template<typename T> class vector {
public:
using iterator = T* // something internal like T*
iterator begin();
}
//vector.cpp
template <typename T>
typename vector<T>::iterator vector<T>::begin() {...}
Const Correctness
让参数成为常量意味着在函数内部,你不能修改这些参数的值
const-interface
在C++中,const
关键字可以用于成员函数的声明,以指示该成员函数不会修改对象的状态。这样的成员函数被称为常量成员函数。当一个成员函数被声明为 const
后,它表示该函数对对象的状态没有修改的权限。
下面是例子
1
2
3
4
5
6
7
8
9
10
class MyClass {
public:
void regularFunction() {
// 这个函数可以修改对象的状态
}
void constFunction() const {
// 这个函数不能修改对象的状态
}
};
static_cast and const_cast
- static_cast
( expression ); - Used to convert from one type to another
- Example: int my_int = static_cast
(3.1); -
CANNOT BE USED WHEN conversion would cast away constness
- const_cast
( expression ); - const_cast can be used to cast away (remove) constness
- Allows you to make non-const pointer or reference to const-object
区别总结:
static_cast
主要用于合法类型之间的转换,不处理const
属性。const_cast
主要用于处理const
属性,可以用于添加或移除const
。- 两者都需要谨慎使用,因为它们可以导致类型不安全或未定义的行为。
本文由作者按照
CC BY 4.0
进行授权