» » » Бьярн Страустрап - Справочное руководство по C++


Авторские права

Бьярн Страустрап - Справочное руководство по C++

Здесь можно скачать бесплатно "Бьярн Страустрап - Справочное руководство по C++" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Рейтинг:
Название:
Справочное руководство по C++
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Справочное руководство по C++"

Описание и краткое содержание "Справочное руководство по C++" читать бесплатно онлайн.








Существует неоднозначность в грамматике языка, касающаяся оператора-выражения и описания, а именно, оператор-выражение, содержащий как самое левое подвыражение явное преобразование типа, заданное в функциональном стиле (§R.5.2.3), может быть не отличим от описания, в котором первый описатель начинается со (. В таких случаях оператор считается описанием.

Для разрешения неоднозначности следует исследовать весь оператор, чтобы определить является он оператором-выражением или описанием. Так устраняется неоднозначность во многих случаях. Например, пусть T - имя-простого-типа (§R.7.1.6), тогда имеем

T(a)-›m = 7; // оператор-выражение

T(a)++; // оператор-выражение

T(a,5) ‹‹ c; // оператор-выражение

T(*e)(int); // описание

T(f)[]; // описание

T(g) = { 1, 2 }; // описание

T(*d)(double(3)); // описание

Остальные случаи представляют описания. Например,

T(a); // описание

T(*b)(); // описание

T(c)=7; // описание

T(d),e,f=3; // описание

T(g)(h,2); // описание

Неоднозначность здесь чисто синтаксическая, т.е. на ее разрешение не влияет тот факт, является ли имя именем-типа или нет.

Есть другой вид коллизии между оператором-выражением и описанием, который разрешается требованием, чтобы описание функции в блоке (§R.6.3) сопровождалось именем-типа, например:

void g()

{

 int f(); // описание

 int a; // описание

 f(); // оператор-выражение

 a; // оператор-выражение

}

R.7 Описания

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

описания:

 спецификации-описания opt список-описателей opt;

 описание-asm

 определение-функции

 спецификация-связи

Описатели в списке-описателей (§R.8) содержат описываемые идентификаторы. Конструкция спецификации-описания может отсутствовать только в определении функций (§R.8.3) или в описании функций. Список-описателей может быть пустым, только при описании класса (§R.9) или перечисления (§R.7.2), т.е. когда спецификация-описания есть спецификация-класса или спецификация-перечисления. Конструкция описание-asm объясняется в §R.7.3, а спецификация-связи в §R.7.4. Описание происходит в определенной области видимости (§R.3.2), правила области видимости приводятся в §R.10.4.

R.7.1 Спецификации

В описании можно использовать следующие спецификации:

спецификация-описания:

 спецификация-класса-памяти

 спецификация-типа

 спецификация-fct

 спецификация-шаблона-типа

 friend

 typedef

спецификации-описания:

 спецификации-описания opt спецификация-описания

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

typedef char* Pc;

static Pc; // ошибка: нет имени

Здесь описание static Pc является незаконным, поскольку не указано никакого имени статической переменной типа Pc. Чтобы иметь переменную типа int с именем Pc, необходимо задать спецификацию-типа int, чтобы показать, что (пере)определяется имя Pc из typedef, а не просто Pc является одним из элементов последовательности конструкций спецификация-описания, например,

void f(const Pc); // void f(char* const)

void g(const int Pc); // void g(const int)

Укажем, что поскольку signed, unsigned, long и short по умолчанию трактуются как int, конструкция имя-typedef, которая появляется после одной из перечисленных спецификаций типа, должна задавать (пере)определяемое имя, например,

void h(unsigned Pc); // void h(unsigned int)

void k(unsigned int Pc); // void k(unsigned int)

R.7.1.1 Спецификации класса памяти

Спецификации класса памяти могут быть такие:

спецификация-класса-памяти:

 auto

 register

 static

 extern

Спецификации auto и register могут применяться только для имен объектов, которые описаны в блоке (§R.6.3), или для формальных параметров (§R.8.3). Почти всегда спецификация auto избыточна и используется не часто, так, auto используется, чтобы явно отделить оператор-описание от оператора-выражения (§R.6.2).

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

Описание объекта считается определением, если только оно не содержит спецификации extern и инициализации (§R.3.1).

Определение приводит к выделению памяти соответствующего размера и выполнению соответствующей инициализации (§R.8.4).

Спецификации static и extern могут применяться только к именам объектов или функций или к анонимным объединениям. Внутри блока недопустимы описания функций со спецификацией static или формальных параметров со спецификацией static или extern. Статические члены класса описываются в §R.9.4. Спецификация extern недопустима для членов класса.

Имя со спецификацией static подлежит внутреннему связыванию. Объекты, описанные как const, подлежат внутреннему связыванию, если только они не были описаны с внешней связью. Имя со спецификацией extern подлежит внешнему связыванию, если только ранее оно не было описано с внутренней связью. Имя с файловой областью видимости и без спецификации-класса-памяти подлежит внешнему связыванию, если только ранее оно не было описано с внутренней связью или со спецификацией const. В смысле связывания для функций, не являющихся членами, спецификация inline эквивалентна static (§R.3.3). Для одного имени все его спецификации, определяющие связывание, должны быть согласованы. Например,

static char* f(); // f() имеет внутреннее связывание

char* f() // f() все еще внутреннее

{/*… */}

char* g(); // g() имеет внешнее связывание

static char* g() // ошибка: противоречие в связывании

{/*… */}

static int a; // `a' имеет внутреннее связывание

int a; // ошибка: второе определение

static int b; // `b' имеет внутреннее связывание

extern int b; // `b' все еще внутреннее

int c; // `c' имеет внешнее связывание

static int c; // ошибка: противоречие в связывании

extern int d; // `d' имеет внешнее связывание

static int d; // ошибка: противоречие в связывании

Имя неопределенного класса можно использовать в описании extern. Однако, такое описание нельзя использовать прежде, чем класс будет определен, например,

struct S;

extern S a;

extern S f();

extern void g(S);

void h()

{

 g(a); // ошибка: S неопределено

 f(); // ошибка: S неопределено

}

R.7.1.2 Спецификации функций

Некоторые спецификации можно использовать только в описании функций.

спецификация-fct:

 inline

 virtual

Спецификация inline подсказывает транслятору, что необходимо произвести подстановку тела функции вместо обычной реализации вызова функции. Подсказка может игнорироваться. В случае функций, не являющихся членами, спецификация inline дополнительно устанавливает для функции внутреннее связывание (§R.3.3). Функция (§R.5.2.2, §R.8.2.5), определенная в описании класса, имеет по умолчанию спецификацию inline.

Функция-член со спецификацией inline должна иметь в точности такое же определение в каждой единице трансляции, где она появляется.

Функцию-член не обязательно явно описывать со спецификацией inline при описании класса, чтобы она трактовалась как подстановка. Если спецификации inline не было, связывание будет внешним, если только определение со спецификацией inline не появится перед первым вызовом функции.

class X {

public:

 int f();

 inline int g(); // X::g() имеет внутреннее связывание

 int h();

};


void k(X* p)

{

 int i = p-›f(); // теперь X::f() внешнее связывание

 int j = p-›g();

 //…

}


inline int X::f() // ошибка: вызов до определения

 // как inline

{

 //…

}


inline int X::g()

{

 //…

}


inline int X::h() // теперь X::h() имеет внутреннее связывание


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Справочное руководство по C++"

Книги похожие на "Справочное руководство по C++" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Бьярн Страустрап

Бьярн Страустрап - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Бьярн Страустрап - Справочное руководство по C++"

Отзывы читателей о книге "Справочное руководство по C++", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.