powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос синтаксиса
11 сообщений из 36, страница 2 из 2
Вопрос синтаксиса
    #34492342
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedISO C++ forbids assigment of arrayну про присвоение никто и не говорил, хотели инициализацию. Вот кстати ещё цитатка manIf the entity is of const-qualified type or reference type, or of a (possibly cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of a const-qualified type, the program is ill-formed. Интересно, зачем сделали разную семантику инициализации полей объектов и обычных переменных.
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34492368
LisFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛюкСкайУокерЕсли честно, в моем случае потребности в не-static нет (класс все равно singleton:)) Стало интересно, не ожидал что С++ не поддерживает такой синтаксис. Наверно если понадобится в каждом экземпляре свой массив указателей, который не должен модифицироваться, то проще наваять класс массива и агрегировать указатель на константный объект этого класса.

Проще - не трогать то, что нельзя! (шутка).

Вообще Строуструп очень часто повторяет одну мысль (в разных вариантах и по разным поводам)
суть которой следующая: при разработке языка С++ исключались те черты, которые могли бы повлечь
дополнительные расходы памяти или времени выполнения. И если посмотреть на машинный код
после компиляции, то действительно нет ничего лишнего, всё компактно и просто.
Я имею в виду компиляторы классического С++, а не всяческие современные IDE, Studio и т. п.

Вот ещё пара цитат из него:

"Язык С++ не пытается ни обеспечить максимально развитого управления защитой,
ни поддержать все мыслимые механизмы для выражения всевозможной защиты.
Такие средства сделали бы язык гораздо более сложным, нежели это есть сейчас,
а он и так обеспечивает весьма высокий уровень выразительности."

"Механизмы управления доступом в С++ обеспечивают защиту от случайного,
а НЕ от преднамеренного доступа. ... Эти возможности относятся к проблемам
окружения и дисциплины программирования, но НЕ к проблемам языка."
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34492553
LisFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoИнтересно, зачем сделали разную семантику инициализации полей объектов и обычных переменных.

Да просто захотелось :-)

Б. Строуструп
цитата:

Запись =выражение наиболее естественна при инициализации простых переменных, особенно - переменных арифметического типа и указателей.

Запись {список-инициализаций} хорошо служит при инициализации массивов и структур данных.

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

конец цитаты.

Кстати для обычных переменных допустимы все виды присваиваний:
int i = 5;
int i = {5};
int i (5);
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34492927
Наверно "истинно правильно" даже так:
Код: plaintext
1.
int i = int( 5 );
:)
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34493068
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вообще-то истинно праильно так
int i(5);
все остальное компилер неявно приведет к этому виду
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34493677
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюкСкайУокер пишет:
> синтаксис. Наверно если понадобится в каждом экземпляре свой массив
> указателей, который не должен модифицироваться, то проще наваять класс
> массива и агрегировать указатель на константный объект этого класса.

Да можно нестатический УКАЗАТЕЛЬ на массив иметь.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34493682
LisFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛюкСкайУокерНаверно "истинно правильно" даже так:
Код: plaintext
1.
int i = int( 5 );
:)

Начало этого топика заставило меня разбудить мои мозги,
уже много лет купающиеся в удобной среде визуальной разработки,
где нет и намёка на появление таких крамольных мыслей (это я всё про первый пост).
Но вот этот пост... как бы это помягче...
Неужели учебника даже не читали?
А начало было интересное...
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34494358
Всего не упомнишь.. я знаю много профессиональных программистов, которые с ходу не скажут что такое explicit, volatile или mutable, и прекрасно при этом живут)
А в случае
Код: plaintext
1.
int x = int( 5 )
я просто исходил из того, что для инициализации значением по умолчанию для выбранного типа корректно записать так:
Код: plaintext
1.
int x = int();
Логично же, что здесь мы вызываем конструктор типа int (как бы извращенски это не звучало:))
Ну а первая запись - передача параметров конструктору...
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34494442
LisFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛюкСкайУокерВсего не упомнишь.. я знаю много профессиональных программистов, которые с ходу не скажут что такое explicit, volatile или mutable, и прекрасно при этом живут)Согласен. Не хотел обидеть.

ЛюкСкайУокерА в случае
Код: plaintext
1.
int x = int( 5 )
я просто исходил из того, что для инициализации значением по умолчанию для выбранного типа корректно записать так:
Код: plaintext
1.
int x = int();
Логично же, что здесь мы вызываем конструктор типа int (как бы извращенски это не звучало:))
Ну а первая запись - передача параметров конструктору...Да конечно же первая запись имеет право быть написана и поймётся компилятором.
Только получилось "масло масляное".
Сначала создаём объект типа int, инициализированный значением 5, и его присваиваем int'у x.
Вместо того, чтобы сразу создать объект x типа int, инициализированный значением 5.
Код: plaintext
int x ( 5 );

И всё-таки, уважаемый ЛюкСкайУокер , скажите (если не секрет) зачем понадобилось
Код: plaintext
1.
2.
class C {
    const char* const Array [ARRAY_SIZE];
};
А?
Прямо маниакальная боязнь потерять или затереть эти строки...
Опять-таки не обижайтесь! :-)
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34494611
Ну что вы, без обид)
Я уже писал, что мне понадобилась конструкция без константности указателей, а константность строк - действительно для защиты от модификации. Покольку класс по паттерну синглетон, потом я вообще так сделал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
static const char *PDDSaloonDetailNames[SaloonNumDetails];
...
const char* PDDPlayerGfxProperty::PDDSaloonDetailNames[PDDPlayerGfxProperty::SaloonNumDetails]=
{
	"body",              //имена объектов в салоне
	"signal_left",	
	"signal_right",
......
};
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34690888
Akiro_Im
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LisFox
ЛюкСкайУокер
Код: plaintext
1.
int x = int( 5 )
Да конечно же первая запись имеет право быть написана и поймётся компилятором.
Только получилось "масло масляное".
Сначала создаём объект типа int, инициализированный значением 5, и его присваиваем int'у x.
Вместо того, чтобы сразу создать объект x типа int, инициализированный значением 5.
Код: plaintext
int x ( 5 );


Не совсем верно. Не буду искать источник (это есть в стандарте и в книгах Мейерса), напишу сразу по сути... При определении объекта в месте объявления насколько мне известно НИКОГДА не вызыватся оператор присваивания или конструктор копирования.

e.g.
int x = int(5); или
int x (5); или
int x = 5;
АБСОЛЮТНО одно и тоже ( за небольшим исключением в случае наличия explicit конструктора ).
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос синтаксиса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]