Arhn - архитектура программирования

Перегрузка оператора с возвратом ссылки в классе C++

В чем разница между этими двумя функциями?

double &operator[](size_t i) { return features_[i]; }
double operator[](size_t i) const { return features_[i]; }

1, первый позволяет изменить features_[i], а второй нет?

2, какой оператор будет выбран, когда я напишу Mytype[i] = 0 и double x = Mytype[i]?


  • 1) Да. 2) Зависит от того, является ли экземпляр Mytype экземпляром const. В обоих случаях. 07.09.2018
  • Если я объявлю Mytpe как const? 07.09.2018
  • Мой комментарий должен был намекнуть на ответ, но поскольку 2-я перегрузка помечена как const, она будет выбрана для const экземпляров, а метод не-const (1-я перегрузка) будет выбран для не-const экземпляров. 07.09.2018
  • Если я предлагаю только первую функцию, есть ли какие-то риски для const Mytype, которая пытается изменить возвращаемое значение? или const перед Mytype гарантирует, что Mytype не назначит features_? 07.09.2018
  • Если вы предложите только первую перегрузку, то она не будет вызвана, если вы попытаетесь вызвать ее для объекта const, поскольку компилятор будет искать только методы const. Вот и вся их цель - вызываться на const объектах. Почему бы вам просто: 1) не попробовать такие вопросы самостоятельно и не посмотреть, какие ошибки выдает вам компилятор? 2) рассмотреть возможность изучения хорошей книги по C++? 07.09.2018
  • Этот код взят из блога, в котором рассказывается о любопытно повторяющемся шаблоне шаблона, и это неполный проект. Спасибо за ссылку. Я создам минимальный проект, чтобы протестировать его. ^-^ 07.09.2018

Ответы:


1

1) Да. Обратите внимание, что второй (const) возвращает копию (возвращается по значению), которую можно изменить, но не изменит оригинал в Mytype.

2) Это зависит исключительно от константности Mytype. Однако double x = Mytype[i] приведет к копии в любом случае.

07.09.2018
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..