Запитання з тегом «language-lawyer»

Питання щодо тонкощів формальних чи авторитетних специфікацій мов програмування та середовищ.

4
Чи гарантовано безпечно виконувати memcpy (0,0,0)?
Я не настільки добре обізнаний із стандартом С, тож будьте ласкаві. Я хотів би знати, чи гарантовано це, за стандартом, memcpy(0,0,0)безпечно. Єдине обмеження, яке я міг знайти, полягає в тому, що якщо області пам'яті перекриваються, тоді поведінка невизначена ... Але чи можна вважати, що області пам'яті тут перекриваються?

6
Чи дозволено компілятору оптимізувати локальну мінливу змінну?
Чи дозволено компілятору оптимізувати це (згідно зі стандартом C ++ 17): int fn() { volatile int x = 0; return x; } до цього? int fn() { return 0; } Якщо так, чому? Якщо ні, чому ні? Ось деякі роздуми з цього приводу: поточні компілятори компілюють fn()як локальну змінну, яку …

1
Чому 019 не є синтаксичною помилкою JavaScript? Або чому 019> 020
Якщо я вводжу 019 > 020в консоль JavaScript (протестовано як у Chrome, так і у Firefox), я отримую відповідь true. Це пояснюється 020інтерпретацією як OctalIntegerLiteral(рівних 16), тоді як 019, очевидно, інтерпретується як DecimalLiteral(і рівних 19). Як 19більше 16, 019 > 020є true. Мене спантеличує те, чому 019інтерпретується як “ DecimalLiteralв …



13
Візьмемо адресу елемента масиву "минулий кінець" за допомогою індексу: законний за стандартом C ++ чи ні?
Я вже кілька разів бачив, як стверджується, що наступний код заборонений стандартом С ++: int array[5]; int *array_begin = &array[0]; int *array_end = &array[5]; Чи є &array[5]законний код C ++ у цьому контексті? Я хотів би отримати відповідь із посиланням на Стандарт, якщо це можливо. Також було б цікаво дізнатись, …

10
Який розмір порожнечі?
Що дасть це твердження? void *p = malloc(sizeof(void)); Редагувати: розширення запитання. Якщо sizeof (void) дає 1 у компіляторі GCC, то виділяється 1 байт пам'яті, і вказівник p вказує на цей байт, а p ++ буде збільшено до 0x2346? Нехай p дорівнює 0x2345. Я говорю про p, а не * p.


3
Чому змінну const іноді не потрібно фіксувати в лямбда-звуці?
Розглянемо наступний приклад: #include <cstdlib> int main() { const int m = 42; [] { m; }(); // OK const int n = std::rand(); [] { n; }(); // error: 'n' is not captured } Чому мені потрібно захоплювати nв другій лямбді, а не mв першій лямбді? Я перевірив розділ …

1
Тип `this` у статичній функції-члена?
У C ++ 5.1.1 / 3 [expr.prim.general] сказано: Тип і категорія значень [of this] визначаються в рамках статичної функції-члена. Що це означає? Як це актуально? Зверніть увагу, що: this не повинен відображатися в оголошенні статичної функції-члена

7
Чи можна використовувати NULL як заміну для значення 0?
Чи можна використовувати NULLвказівник як заміну для значення 0? Або щось не так у цьому робити? Наприклад, наприклад: int i = NULL; як заміна для: int i = 0; Як експеримент я склав наступний код: #include <stdio.h> int main(void) { int i = NULL; printf("%d",i); return 0; } Вихід: 0 …

5
Порядок оцінки індексів масиву (проти виразу) у С
Дивлячись на цей код: static int global_var = 0; int update_three(int val) { global_var = val; return 3; } int main() { int arr[5]; arr[global_var] = update_three(2); } Який запис масиву оновлюється? 0 або 2? Чи є в специфікації C частина, яка вказує на пріоритет роботи в даному конкретному випадку?

3
std :: vector (ab) використовує автоматичне зберігання
Розглянемо наступний фрагмент: #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } Очевидно, що це може вийти з ладу на більшості платформ, оскільки розмір стека за замовчуванням зазвичай менше 20 Мб. Тепер розглянемо наступний код: #include <array> #include <vector> int main() { using huge_type = std::array<char, …


3
C ++ decltype і дужки - чому?
Тема обговорювалася раніше , але це не дублікат. Коли хтось запитує про різницю між decltype(a)і decltype((a)), звичайна відповідь - aце змінна, (a)є виразом. Я вважаю цю відповідь незадовільною. По-перше, aце також вираз. Параметри первинного вираження включають, серед іншого, - (вираз) id-вираз Що ще важливіше, фразування для decltype розглядає круглі дужки …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.