crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Перерисовка формы
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 4.3.2011, 8:26
  BRE, о, кстати да, спасибо ) Я не знал про mutable. Но суть всё равно не меняется

Цитата(abc @ 3.3.2011, 22:25) *
Я не представляю на какой "всякий" случай мне нужно их константить)

ты, наверное, не писал ещё реализации сложных алгоритмов
Иначе бы таких сомнений не возникло
abc Дата 3.3.2011, 21:33
  да, но о локальных переменных особенно думать не нужно, а если всё же в функции тёмный лес, то констом-то её не спасёшь
Rocky Дата 3.3.2011, 21:06
 
Цитата
Я не представляю на какой "всякий" случай мне нужно их константить) Я же, как разработчик, всегда знаю, меняется моя переменная или нет. Я вижу полезность конст в том, что он подсказывает по тексту программы, что происходит. Как-то так... Но вот Юра говорит про оптимизацию...

Ты да. А другой разработчик будет тратить время на то, чтобы понять, меняется ли эта переменная или нет. И если да, то как и где.
abc Дата 3.3.2011, 20:25
  Я не представляю на какой "всякий" случай мне нужно их константить) Я же, как разработчик, всегда знаю, меняется моя переменная или нет. Я вижу полезность конст в том, что он подсказывает по тексту программы, что происходит. Как-то так... Но вот Юра говорит про оптимизацию...
BRE Дата 3.3.2011, 20:06
 
Цитата(Алексей1153 @ 3.3.2011, 19:49) *
И тот самый пример (для винды, правда): имеется класс, одним из членов которого является объект критичесвкой секции. Также имеется константный метод (читаем что-либо из массива, инкапсулированного внутри класса). Вроде всё возможно, так как чтение не меняет массив. Но тут такая неприятность, что у объекта критической секции метод Lock неконстантный. Вот и придётся принудительно привести this к неконстантному типу, чтобы было возможно вызвать метод

А почему для этого не воспользоваться модификатором mutable?
Алексей1153 Дата 3.3.2011, 19:49
  abc, это потому что TYPE& по умолчанию и без проблем приводится к const TYPE&. С указателями так же

Если сильно придирчиво подойти к вопросу, то константный локальных или стековых переменных вообще не бывает, их содержимое можно легко поменять при надобности. Но необходимость этого - признак кривого проектирования (либо прям ваще суровая необходимость, пример чуть ниже приведу)

Если же переменная не должна поменяться, всегда делай её const. Просто на всякий случай :)

И тот самый пример (для винды, правда): имеется класс, одним из членов которого является объект критичесвкой секции. Также имеется константный метод (читаем что-либо из массива, инкапсулированного внутри класса). Вроде всё возможно, так как чтение не меняет массив. Но тут такая неприятность, что у объекта критической секции метод Lock неконстантный. Вот и придётся принудительно привести this к неконстантному типу, чтобы было возможно вызвать метод
abc Дата 3.3.2011, 15:34
  Я читал, что оптимальный вариант передавать переменную в функцию так, если не хочется изменять:
func(const int& x) - объявили

и с этой функцией уже можно спокойно работать так:
{
int y;
func(y);
}

В этом случае по логике программы не нужно у объявлять константной. Или компилятору и в этой ситуации было бы лучше, чтобы она была константной?
Litkevich Yuriy Дата 3.3.2011, 15:09
 
Цитата(abc @ 3.3.2011, 14:12) *
я просто думаю, что конст для локальных переменных без надобности
В Си++, в основном они и используются. Они могут передаваться в разные методы, в том числе по ссылке изи указателю.
Мало того компиллер многое может с оптимизировать, зная что это константная переменная.
abc Дата 3.3.2011, 12:12
  я просто думаю, что конст для локальных переменных без надобности
Алексей1153 Дата 3.3.2011, 8:46
  abc, полезно, если не нужно случайно дальше по течению кода менять значение переменной - компилятор тыкнет носом )
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 22:59