Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 52 53 [54] 55 56 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#796
,
|
|
|
|
а что, это означает, что их нужно называть одинаково? кто этому обязал? |
|
Сообщ.
#797
,
|
|
|
|
Цитата D_KEY @ --Ins--, покажи пример, в котором бы "легально"(без грязных хаков) компилятор давал изменять константные объекты? Скрытый текст ![]() ![]() mutable |
|
Сообщ.
#798
,
|
|
|
|
Цитата Мяут-Настоящий @ Цитата D_KEY @ --Ins--, покажи пример, в котором бы "легально"(без грязных хаков) компилятор давал изменять константные объекты? Скрытый текст ![]() ![]() mutable Я уже "намекал" на него. Но это - решение самого объекта, для специальных случаев, вроде кэширования или лени. |
|
Сообщ.
#799
,
|
|
|
|
Цитата korvin @ а что, это означает, что их нужно называть одинаково? кто этому обязал? А как ты предлагаешь называть? ConfigurationParser, чтоб никто не догадался? В С++ я могу сделать так: ![]() ![]() #include <OptionParser.h> ... auto op = OptionParser(); |
|
Сообщ.
#800
,
|
|
|
|
Цитата --Ins-- @ D_KEY, я может чего не понял? Сначала, ты говоришь о невозможности изменить объект, который в подпрогрмму передается с const? Или о чем речь? Ты говоришь, что уже показал нам, что "защита" не работает. Я прошу показать. |
|
Сообщ.
#801
,
|
|
|
|
Цитата Мяут-Настоящий @ Цитата D_KEY @ --Ins--, покажи пример, в котором бы "легально"(без грязных хаков) компилятор давал изменять константные объекты? Скрытый текст ![]() ![]() mutable т.е. можно гарантировать, что объект будет изменяем, даже если его передали как const? если да, то есть ли способ гарантировать, что объект не будет изменен, даже если он mutable? если да то, есть ли способ изменить объект, даже если он гарантировано защищен от изменений? если да, то... =) |
|
Сообщ.
#802
,
|
|
|
|
Цитата --Ins-- @ Заметь, я на уровень указателей и ассемблерных вставок не опускался, я остался на уровне абстракции объектов И нарушил, нет, не инкапсуляцию, она тут ни причем... А вашу "гарантию" ![]() Ничего ты не нарушил, ты просто вообще не понял о чем тебе D_KEY говорит! |
|
Сообщ.
#803
,
|
|
|
|
Цитата korvin @ т.е. можно гарантировать, что объект будет изменяем, даже если его передали как const? если да, то есть ли способ гарантировать, что объект не будет изменен, даже если он mutable? mutable все же для описанимя не логики объекта, а ее физики. Например блокировку, очевидно нужно мочь менять и в случае константности объекта Добавлено На всякий случай замечу, что mutable прописывается полям. |
|
Сообщ.
#804
,
|
|
|
|
Цитата --Ins-- @ На совести какого программиста? Если ты хочешь, чтобы возвращённый по ссылке объект никто не менял, его никто не изменит независимо от совести. Вот как код D_KEYя: D_KEY, идея константных объектов может и замечательная, но реализовать ее так, увы, невозможно Никто тебе не гарантирует ничего, ты можешь только надеяться. Так и говори "я надеюсь", а не "мне гарантировано". Я же говорю, никто не гарантирует неизменность объекта - это исключительно на совести программиста. Если нужно чтобы объект не изменялся - не передавай ссылку на него, передай значения нужных параметров ![]() ![]() class Rect { public: //... void SetRect(const Rect &rect); const Rect & GetRect() const; }; |
|
Сообщ.
#805
,
|
|
|
|
Цитата D_KEY @ Я прошу показать. Речь идет о том, что объект переданный со словом const в методе не может быть изменен, так? Но вы же говорите что в этом методе можно дергать методы других объектов. А они то откуда знают, что менять объект нельзя? Допустим, мы вызвали какой-то метод, который, казалось бы, никакого отношения к константному объекту не имеет. А он - имел. Либо явно в своем коде, либо через каллбэк поменял значение изначального объекта. Это возможно? |
|
Сообщ.
#806
,
|
|
|
|
Цитата Мяут-Настоящий @ А как ты предлагаешь называть? ConfigurationParser, чтоб никто не догадался? В С++ я могу сделать так: ![]() ![]() #include <OptionParser.h> ... auto op = OptionParser(); и если тут же подключишь какой-нибудь "../OptionParser.h", который тоже экспортирует класс OptionParser, как быть? но вообще меня вопрос натолкнул на другую мысль: в какой модуль поместить этот OptionParser, в Parser, где все парсеры или в Options, где все классы для работы с опциями? =) может неплохо было бы иметь тегированные пространства имен? |
|
Сообщ.
#807
,
|
|
|
|
Цитата --Ins-- @ Речь идет о том, что объект переданный со словом const в методе не может быть изменен, так? Но вы же говорите что в этом методе можно дергать методы других объектов. А они то откуда знают, что менять объект нельзя? Так ты можешь дергать только те методы, которые по такой же гарантии не имеют права изменять объект, иначе ошибка компиляции, тебе уже 3 раза это написали, я в четвертый пишу Добавлено Цитата --Ins-- @ Допустим, мы вызвали какой-то метод, который, казалось бы, никакого отношения к константному объекту не имеет. А он - имел. не прокатят такие финты |
|
Сообщ.
#808
,
|
|
|
|
Цитата korvin @ может неплохо было бы иметь тегированные пространства имен? т.е. например пишешь что-то типа ![]() ![]() [Option, My, Parser, Class] -- получаешь свой класс парсера опций соответственно ![]() ![]() import [Option, My, Class] -- получаешь все свои классы для работы с опциями ![]() ![]() import [Parser, My] -- получаешь все свои определения (не только классы), связанные с парсерами по-моему прикольно было б =) вроде для перла есть пакет, позволяющий тегировать функции |
|
Сообщ.
#809
,
|
|
|
|
Цитата KILLER @ Так ты можешь дергать только те методы, которые по такой же гарантии не имеют права изменять объект, иначе ошибка компиляции, тебе уже 3 раза это написали Мне три раза написали, что методы других объектов, которые параметрами нас не принимают, МОЖНО вызывать. |
|
Сообщ.
#810
,
|
|
|
|
Цитата --Ins-- @ Мне три раза написали, что методы других объектов, которые параметрами нас не принимают, МОЖНО вызывать. ![]() Параметр - это лишь один из способов поиметь объект, еще можно напрямую присвоить... |