Здравствуйте, гость ( Вход | Регистрация )
Алексей1153 | Дата 4.3.2011, 8:26 |
BRE, о, кстати да, спасибо ) Я не знал про mutable. Но суть всё равно не меняется Я не представляю на какой "всякий" случай мне нужно их константить) ты, наверное, не писал ещё реализации сложных алгоритмов Иначе бы таких сомнений не возникло |
|
abc | Дата 3.3.2011, 21:33 |
да, но о локальных переменных особенно думать не нужно, а если всё же в функции тёмный лес, то констом-то её не спасёшь | |
Rocky | Дата 3.3.2011, 21:06 |
Цитата Я не представляю на какой "всякий" случай мне нужно их константить) Я же, как разработчик, всегда знаю, меняется моя переменная или нет. Я вижу полезность конст в том, что он подсказывает по тексту программы, что происходит. Как-то так... Но вот Юра говорит про оптимизацию... Ты да. А другой разработчик будет тратить время на то, чтобы понять, меняется ли эта переменная или нет. И если да, то как и где. |
|
abc | Дата 3.3.2011, 20:25 |
Я не представляю на какой "всякий" случай мне нужно их константить) Я же, как разработчик, всегда знаю, меняется моя переменная или нет. Я вижу полезность конст в том, что он подсказывает по тексту программы, что происходит. Как-то так... Но вот Юра говорит про оптимизацию... | |
BRE | Дата 3.3.2011, 20:06 |
И тот самый пример (для винды, правда): имеется класс, одним из членов которого является объект критичесвкой секции. Также имеется константный метод (читаем что-либо из массива, инкапсулированного внутри класса). Вроде всё возможно, так как чтение не меняет массив. Но тут такая неприятность, что у объекта критической секции метод 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, 12:12 |
я просто думаю, что конст для локальных переменных без надобности | |
Алексей1153 | Дата 3.3.2011, 8:46 |
abc, полезно, если не нужно случайно дальше по течению кода менять значение переменной - компилятор тыкнет носом ) | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.4.2024, 22:59 |