1

Тема: Специфікатори С++

Перечитую колись незрозумілі розділи з книги " 4 видання по С++ Г.Штлдт". Дойшов до специфікаторів але знову мало що зрозумів. Можете пояснити її мені. Або кинути силку на статтю яку і баран зрозуміє.

2

Re: Специфікатори С++

Вкажіть які саме службові слова плюсів Ви не розумієте...

3

Re: Специфікатори С++

Не зрозумів такі специфікатори як:
1) extern
2) static
3) register
4) auto
Є ще mutable але я про нього взагалі ще нічого не читав

Подякували: koala1

4

Re: Специфікатори С++

Це вказування класу пам'яті.
http://www.google.com.ua/url?sa=t&r … upJG3YJXig

extern можна використовувати для використання змінних і функцій, що описані в одному .cpp файлі - в інших.
static функції використовують у класах. статичну функцію можна викликати без вказування конкретного екземпляра класу "QMyClass::mystaticFunc("значення параметру")"
static змінна у тілі функції ініціалізується лише один раз і значення зберігається для наступного виклику

int func() {
  static int a = 0;
  ...
  а++;
}


При першому виклику значення "а" буде 0, при другому 1 і т.д.
auto і register це вказівки для компілятора де зберігати змінну - регістр процесора чи оперативна пам'ять.
Ще не зустрічав їх на практиці. компілятору краще знати, як збільшити швидкість роботи програми.

Подякували: koala1

5

Re: Специфікатори С++

Ще не зустрічав їх на практиці. компілятору краще знати, як збільшити швидкість роботи програми.

Насправді компілятори в цьому плані досить дурні, хоча і дуже просунулися за останнє десятиріччя в плані кодогенерації. Ці особливості мови рідковживані, бо по-перше іноді леше на асмі написати, а по-друге використані директиви для однієї архітектури не завжди будуть прийнятні для іншої архітектури.

6

Re: Специфікатори С++

Більше того - сучасні компілятори ігнорують register.

7

Re: Специфікатори С++

Уточнення по static: поза класом він обмежує область видимості функції чи змінної поточним файлом.

Подякували: 0xDADA11C72

8

Re: Специфікатори С++

+ якщо змінити значення статичного поля класу для одного його екземпляра (об'єкта)- то для всіх інших воно теж зміниться

9

Re: Специфікатори С++

register - да зараз часто ігнорується, бо є лише 4ри регістри загального призначення ЕАХ, ЕВХ, ЕСХ, ЕDX. Інші краще не чіпати, в наш час, багато функцій вносяться більше ніж чотири параметри, а іноді регістри виконуються як доможні дані при маніпуляції даними, тому компілятор береже регістри, кидає ці дані встек, також все залежить з яким флагом оптимізації зібрати програму.

Автору раджу не вчити С++, а почати зчистого С, це дві великі різниці, книга Д.РІчі, та іншікниги по "С"

10 Востаннє редагувалося koala (28.07.2014 10:23:24)

Re: Специфікатори С++

reverse2500 написав:

register - да зараз часто ігнорується, бо є лише 4ри регістри загального призначення ЕАХ, ЕВХ, ЕСХ, ЕDX.

"Зараз" - це коли, в 90-і? Зараз вже AMD-64/Intel-64/x86-64 використовується, з 8 додатковими регістрами.
Ну і C/C++ не обмежується інтелівськими архітектурами.

11

Re: Специфікатори С++

зараз - це в наш час
х64 як  такої архітектури немає, насправдіце ЕМ64Т, яку інтел розробляє від AMD в своїх процах, післятого як лоханулися з IA-64
ARM теж не солодко з цим, як начнеться, там що регістри в режимах працють, а інші ні, то краще їх помістити в стек і не морочити собі голову. В ARM не всі процессори мають 31-32-33 регістра, є такі що 15. До 33 регістрів мають процессори серії А, інші зазвичай 15, але там хто як хоче, так і дроче з тими процами по конструкції.

12

Re: Специфікатори С++

х64 як  такої архітектури немає

Скажіть це Microsoft

13

Re: Специфікатори С++

0xDADA11C7 написав:

Скажіть це Microsoft

те що так маркує свої образи Microsoft не означає що щось там нове. Обзази хоть gentoo, хоть *BSD ідуть часто i386, AMD64, (іменувати можнахоть x32, x64) остання заведеться на нових процессорах, якщо сумісний режим є, а з IA-64 Intel круто лоханулись.

14

Re: Специфікатори С++

те що так маркує свої образи Microsoft не означає що щось там нове.

Я кажу про синонімічний ряд, який позначає одну архітектуру, а не про щось нове. Звичайно, плутанина страшна, але не могла ж Intel назвати архітектуру AMD64 :)

15

Re: Специфікатори С++

0xDADA11C7 написав:

Звичайно, плутанина страшна, але не могла ж Intel назвати архітектуру AMD64 :)

так, знайомий випадок, колив сервіс центр принесли комп, мол віндовс не ставиться, а виявилось що вони скачали образ віндовса для IA-64.

Подякували: 0xDADA11C71