C что значит двоеточие

от admin

Двоеточие в определении конструктора

У меня возникла проблема с пониманием синтаксиса. Увидел вот такой конструктор:

Что значит двоеточие после аргумента в первых скобках?

Область кода за двоеточием и до начала тела конструктора называется списком инициализации членов (англ. "member initializer list").

Используется как для инициализации членов класса, так и для вызова конструктора базового/базовых классов, т.е. по сути, инициализации базовой составляющей. Также здесь может быть вызов другого конструктора текущего класса (делегирование конструкторов, начиная с c++11).

Без инициализатора конструктора не обойтись, если в классе присутствует член ссылочного типа или константа, или член класса, у которого нет конструктора по умолчанию:

т.к. код, начинающийся за фигурной скобкой будет приводить уже не к инициализации члена, а к присваиванию ему значения, чего нельзя сделать для упомянутых ранее ссылок или констант.

Дополнительно стоит заметить (как было упомянуто в комментарии Monah Tuk), что если член-класса не инициализирован явно в инициализаторе конструктора и при этом ему присваивается значение в теле конструктора, то он сначала будет инициализирован конструктором по умолчанию (или инициализацией в определении класса (c++11)):

После чего выполнится присваивание в теле конструктора. Для сложных классов это может приводить к дополнительным расходам.

Т.о. инициализацию членов стоит производить либо в определении класса, либо в инициализаторе конструктора. Не стоит пытаться сделать нечто подобное непосредственно внутри тела конструктора.

что делает двоеточие в c?

Мне дали этот пример в классе, и я не уверен, что он делает. Я понимаю, что двоеточие добавляет битовое поле, но я все еще не уверен в этом вопросе:

задан 16 марта ’12, 03:03

Ваш пример не битовая операция. Это тип оператора if-then-else, называемый тернарным оператором. — Java42

Интересно, кто голосует за эту штуку. c-faq, rtm. — Tomas Pruzina

Учитывая качество вопросов здесь в последнее время, это должен быть ежегодный вызов «Миграция с VB на C» — tbert

4 ответы

?: оператор называется условным оператором.

If b Значение > 0 , Значение 3 назначен на a иначе значение 1 назначен на a .

Возьмите свою книгу Кернигана и Ритчи, 2-е издание, глава 2.11 Условные выражения, объясняется поведение оператора.

ответ дан 16 мар ’12, в 05:03

Более известен как тернарный оператор. — Петр C

Он называется тернарным оператором, а не «условным». Видеть en.wikipedia.org/wiki/%3F: — пользователь405725

@VladLazarenko Стандарт C на самом деле называет его «условным оператором», хотя я согласен, что «тройной» встречается чаще. — Тимоти Джонс

@VladLazarenko Я удалил ваши изменения в своем ответе. я написал условный оператор нарочно. Это имя этого оператора в C. Тот факт, что он также является тернарным оператором (даже единственным тернарным оператором в C), является качеством оператора, но стандартное имя условный оператор (см. C99, 6.5.15 Условный оператор). — ауа

«: «(двоеточие) в структуре C — что это значит? [дубликат]

это битовые поля. В основном, число после двоеточия описывает, сколько битов использует это поле. Вот это цитата из MSDN описания битовых полей:

константное выражение, задающее ширину поля в битах. Этот спецификатор типа для Декларатора должен быть unsigned int, signed int или int, а константа-выражение должно быть неотрицательным целочисленным значением. Если значение равно нулю, объявление не имеет Декларатора. Массивы битов поля, указатели на битовые поля и функции, возвращающие битовые поля не позволять. Необязательный Декларатор называет битовое поле. Битовое поле может быть объявлен только как часть структуры. Адрес-оператора ( & ) не может быть применен к компонентам битового поля.

безымянные битовые поля нельзя ссылаться, и их содержание в время непредсказуемо. Их можно использовать как «фиктивные» поля, для цели выравнивания. Неименованное битовое поле, ширина которого определяется как 0 гарантирует, что хранение для члена, следующего за ним в struct-declaration-list начинается на границе int.

в этом примере определяется двумерный массив структур с именем screen.

Edit: еще один важный бит из ссылки MSDN:

битовые поля имеют ту же семантику, что и целочисленный тип. Это означает битовое поле используется в выражениях точно так же, как переменная того же базового типа будет используется, независимо от того, сколько бит в битовом поле.

быстрый пример хорошо иллюстрирует это. Интересно, что при смешанных типах компилятор по умолчанию принимает значение sizeof (int) .

Читать:
Adpclientservice exe что это

«:» (Двоеточие) в структуре C — что это значит? [Дубликат]

Это битовые поля. В основном, число после двоеточия описывает количество бит, которое использует поле. Ниже приведена цитата из MSDN, описывающая битовые поля:

Константное выражение указывает ширину поля в битах. Тип-спецификатор для декларатора должен быть без знака int, подписанным int или int, а константное выражение должно быть неотрицательным целочисленным значением. Если значение равно нулю, декларация не имеет декларатора. Массивы бит поля, указатели на битовые поля и функции, возвращающие поля бит, являются не допускается. Необязательный declarator называет поле бит. Поля бит может быть объявлена ​​только как часть структуры. Адрес-оператор (&) не может применяться к компонентам битового поля.

Неверные поля бита не могут быть указаны, а их содержимое при запуске время непредсказуемо. Они могут использоваться как поля «dummy», для выравнивание. Неименованное поле бит, ширина которого задается как 0 гарантирует, что хранение для члена, следующего за ним, в struct-declaration-list начинается с границы int.

В этом примере определяется двумерный массив структур с именем screen.

Изменить: еще один важный бит из ссылки MSDN:

Бит-поля имеют ту же семантику, что и целочисленный тип. Это означает, что бит используется в выражениях точно так же, как переменная того же базового типа, независимо от того, сколько бит в поле бит.

Быстрый образец хорошо иллюстрирует это. Интересно, что со смешанными типами компилятор по умолчанию имеет значение sizeof (int) .

Похожие статьи