template <class T>
Vector<T>::Vector() : _size_(0){
this->_capacity_ = 10;
buffer = new T[this->_capacity_];
}
template <class T>
Vector<T>::Vector(unsigned int s) {
this->_size_ = s;
this->_capacity_ = _size_;
this->buffer = new T[this->_capacity_];
init(0, this->_size_);
}
template <class T>
Vector<T>::Vector(unsigned int s, const T &initial){
this->_size_ = s;
this->_capacity_ = s;
this->buffer = new T[this->_capacity_];
init(0, s, initial);
}
我的代码经常使用this
关键字。在没有this
关键字的情况下,在类中调用成员函数而不是直接访问它是一种良好的做法吗?如果我总是调用成员函数来访问成员变量,它会产生开销吗? C ++实现做了什么?
答案 0 :(得分:6)
没有开销,因为编译了代码。当你这样做时:
this->_size = 5;
和
_size=5
编译器将它们视为相同并生成相同的代码。
如果您喜欢使用'this',请使用它。
我个人不喜欢它。
答案 1 :(得分:1)
在构造函数中初始化成员的方式是错误的。您应该使用初始化列表:
struct X {
X() : a(1), b(2), c(3) {}
int a, b, c;
};
否则该值必须默认初始化并在之后重置。
访问非虚拟成员函数的成本很难计算,因为它取决于内联。如果它是内联的,它是免费的。这很可能是简单的get / setters。
对于虚拟成员函数,它取决于编译器在编译时可能提升虚拟调用的能力,但您应该假设会有开销。