вернуть * этот с ++ - PullRequest
       31

вернуть * этот с ++

2 голосов
/ 19 сентября 2011

если у вас есть функция clear (), которая очищает все элементы в массиве, используете ли вы тип void или ссылки на тип, с которым вы работаете, и возвращаете * this.

Пример.

void Vector<T>::clear() {   
}

или

Vector& Vector<T>::clear(){
    return *this
}

Я не совсем понимаю, когда возвращать "this", а когда использовать тип void.

Ответы [ 3 ]

9 голосов
/ 19 сентября 2011

Полагаю, возвращение *this полезно для цепочки вызовов API.obj.doSomething().doSomethingElseAfterwards().Поэтому вызовы, в которых цепочка полезна, например, add, являются хорошими кандидатами на *this.И методы, где цепочка не очень полезна, может вернуть void.

Лично мне не нравится этот стиль цепочки, но многим людям нравится свободный API, это позволяет.

4 голосов
/ 19 сентября 2011

Это зависит от вас.

Для справки: std::vector::clear возвращает void.

3 голосов
/ 19 сентября 2011

В данном конкретном случае нет особой причины возвращать текущий объект, о котором я могу думать, кроме как включить сомнительный код, такой как

myVector.clear().add(somethingNew);
...