我应该使用“this”关键字从内部成员函数访问类成员吗?

时间:2014-02-10 14:33:58

标签: c++ function oop

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 ++实现做了什么?

2 个答案:

答案 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。

对于虚拟成员函数,它取决于编译器在编译时可能提升虚拟调用的能力,但您应该假设会有开销。