Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Void test()






{

D1 d(6); // Ой: d.x не инициализирован

D1 e; // Ошибка: D1 не содержит конструктор по умолчанию

 

Вы можете защитить свои ноги путем использования инициализаторов членов (member-initializer):

struct D1: B1 {

using B1:: B1; // Неявно объявляет D1(int)

int x{0}; // поле x проинициализировано

};

Void test()

{

D1 d(6); // d.x равно 0

}

 

См. также:

  • the C++ draft section 12.9.
  • [N1890=05-0150 ] Bjarne Stroustrup and Gabriel Dos Reis: Initialization and initializers (an overview of initialization-related problems with suggested solutions).
  • [N1898=05-0158 ] Michel Michaud and Michael Wong: Forwarding and inherited constructors.
  • [N2512=08-0022] Alisdair Meredith, Michael Wong, Jens Maurer: Inheriting Constructors (revision 4).

 

Статические утверждения (утверждения времени компиляции) – static_assert

Статические утверждения (утверждения времени компиляции) содержат константное выражение и строковый литерал:

Static_assert(expression, string);

 

Компилятор вычисляет выражение, и если результат вычисления равен false (т.е. утверждение нарушено), выводит строку в качестве сообщения об ошибке. Например:

static_assert(sizeof(long)> =8,

" 64-bit code generation required for this library.");

struct S { X m1; Y m2; };

static_assert(sizeof(S)==sizeof(X)+sizeof(Y),

" unexpected padding in S");

 

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

int f(int* p, int n)

{

// Ошибка: выражение в static_assert() не является

// константным выражением

static_assert(p==0, " p is not null");

//...

}

 

(вместо этого следует проверить выражение и сгенерировать исключение в случае неудачи).

См. также:

  • the C++ draft 7 [4].
  • [N1381==02-0039] Robert Klarer and John Maddock: Proposal to Add Static Assertions to the Core Language.
  • [N1720==04-0160] Robert Klarer, John Maddock, Beman Dawes, Howard Hinnant: Proposal to Add Static Assertions to the Core Language (Revision 3).

 

Long long -- более длинное целое

Целочисленная переменная, размером, по крайней мере, 64 бита. Например:

long long x = 9223372036854775807LL;

 

Нет, никаких long long long, и long нельзя рассматривать как short long long.

См. также:

  • the C++ draft???.
  • [05-0071==N1811] J. Stephen Adamczyk: Adding the long long type to C++ (Revision 3).

 

Nullptr -- литерал для задания нулевого указателя

nullptr – это литер, который задает нулевой указатель; это не целочисленное значение:

char* p = nullptr;

int* q = nullptr;

char* p2 = 0; // 0 все еще работает и p==p2

Void f(int);

void f(char*);

f(0); // вызов f(int)

f(nullptr); // вызов f(char*)






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.