2016-12-18 1 views
0

Я делал класс для массивов для работы в виде стеков и встречался при двух типах функций, чтобы вернуть верхний элемент. Я не могу понять разницу между ними и то, как компилятор решает, какой из двух звонит. Ниже приведен код для двух.Разница между функцией, возвращаемой ссылкой, и функцией const, возвращающей значение const

T & getTop() {    //function 1 
    return arr[top - 1]; 
} 
const T & getTop() const { //function 2 
    return arr[top - 1]; 

«верхняя» переменная указывает на текущую пустую ячейку в массиве, а T - общий тип данных.

Благодарим за помощь.

ответ

1

Я полагаю, что ваш стек называется stack.

stack<T> s; 
/*do something with it*/ 
s.getTop(); //will call the non const version 
std::as_const(s).getTop() //will call const version 

И точно так же:

const stack<T> s; 
s.getTop() //const version 

Таким образом, если тип переменной не сопзЬ, он будет вызывать нон версии константный. В противном случае он будет вызывать версию const.

+0

Спасибо, не мог найти более легкого объяснения, чем это. –

0

Вы можете увидеть это answer для справки, но в нескольких словах для этого конкретного случая выглядит так, что для других методов не будет изменяться логическое состояние объекта.

0

A const T& Ссылка не позволяет изменять ссылочные данные. Обратите внимание, что второй метод getTop() также объявлен как const, чтобы указать, что метод не изменяет состояние экземпляра, на котором он вызван.

Для реализации верхнего элемента из контекста, в котором экземпляр, содержащий этот массив, должен иметь две реализации: const и в то же время разрешает изменять верхний элемент в контекстах, в которых это не const.

Это является частью более крупной концепции под названием сопз корректность, вы можете получить дополнительную информацию об этом here, а именно:

Смежные вопросы