Форум программистов, компьютерный форум CyberForum.ru

Защита const - C++

Восстановить пароль Регистрация
 
nsashans
7 / 7 / 0
Регистрация: 16.07.2012
Сообщений: 56
11.09.2012, 09:29     Защита const #1
C++
1
 const Int& operator= (const Int& a)
Отчего защищает первый const
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.09.2012, 09:52     Защита const #2
Защищает от штук, подобных этой:
C++
1
2
Int a,b,c;
(a = b) = c;
Пример из Мэйерса. Присваивается значение b значению a, а затем результату этого присвоения присваивается c, что вроде как возможно для встроенных типов. Однако возврат константной ссылки из оператора operator= такое запретит. Мейерс говорит, что это не нужно. Я как-то не сталкивался.
PSIAlt
 Аватар для PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
11.09.2012, 10:24     Защита const #3
Нене, у Мейерса был пример немного другой:
C++
1
if( a*b = c )
Типа опечатка вместо == поставили = и все скомпилилось, но получили неопредленное поведение.
По сути, вопрос там обобщается до "создавайте классы с поведением, схожим со встроенными типами". Так что const в случае operator= это не более чем выдумка автора.

Насчет поста №2: полагаю, что пример не очень удачный, т.к. по идее такая конструкция должна была бы работать(по законам встроенных типов):
C++
1
2
Int a,b,c;
a=b=c;
Но она работать не будет так как результат b=c будет const, а переменная a - не const, отсюда - костантность в первом примере это вредный излишек.
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
11.09.2012, 10:42     Защита const #4
в ифах крайне хорошо делать так:
C++
1
2
3
int a;
if(1 == a) {
}
ну то есть то что слева чтобы было константой, тогда на запись вида:
C++
1
2
3
int a;
if (1 = a) {
}
компилятор сам сругается.
понятно, что не всегда хотя бы один объект константа, но перед тем как написать иф, можно подумать.
PSIAlt
 Аватар для PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
11.09.2012, 10:54     Защита const #5
Хехе, на жаргоне это называют Условие Йоды
nsashans
7 / 7 / 0
Регистрация: 16.07.2012
Сообщений: 56
11.09.2012, 11:21  [ТС]     Защита const #6
разобрался спасибо
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.09.2012, 15:28     Защита const #7
Цитата Сообщение от PSIAlt Посмотреть сообщение
Нене, у Мейерса был пример немного другой:
C++
1
if( a*b = c )
Ну Мейерс разный бывает я взял из второго издания "Эффективного использования С++" (1998 г), правило 15, стр.69.
И там как раз говорится, что конст возвращать из оператора присваивания не стоит - нарушает принципы присваивания, характерные для базовых типов.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
11.09.2012, 16:16     Защита const #8
Да вообще перегрузка операторов это зло :-)
PSIAlt
 Аватар для PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
11.09.2012, 16:32     Защита const #9
Ну, добро и зло - понятия для детей. Топор тоже для кого-то орудие убийства, а для кого-то это тепло зимой. Важно что есть топор и его можно использовать когда будешь строить баню или когда придут вражеские захватчики=) Суть одна - все хорошо в меру и в контексте конкретной ситуации
OhMyGodSoLong
11.09.2012, 18:17
  #10

Не по теме:

Цитата Сообщение от Герц Посмотреть сообщение
Да вообще перегрузка операторов это зло :-)
Неявное приведение типов — большее зло.

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.09.2012, 19:46     Защита const #11
~OhMyGodSoLong~, Это наибольшее зло, которое ввел коммитет.. Хорошо хоть теперь есть explicit для операторов приведения типа.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
11.09.2012, 19:54     Защита const #12
А у кого-нибудь есть книженция нового стандарта поновее, чем черновик 3242? Неплохо бы иметь под рукой, для консультации при нахождении непонятного поведения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 20:41     Защита const
Еще ссылки по теме:

C++ Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
C++ Чем отличаются объявления const char* и const* char
C++ Чем отличаются выражения (const int[]){value} от (const int[]){100}

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.09.2012, 20:41     Защита const #13
http://www.open-std.org/JTC1/SC22/WG...2012/n3376.pdf
Yandex
Объявления
11.09.2012, 20:41     Защита const
Ответ Создать тему
Опции темы

Текущее время: 12:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru