Запитання з тегом «undefined-behavior»

Непередбачуваний результат компіляції або виконання програми, що порушує правила мови, ні компілятор, ні інтерпретатор, ні система виконання не повинні застосовувати. НЕ ВИКОРИСТОВУЙТЕ цей тег для запитань щодо типу даних або значення повернення "undefined". У цих випадках замість цього слід використовувати тег [undefined].

4
Чому 'd / = d' не видає ділення на нуль винятку, коли d == 0?
Я не зовсім розумію, чому я не отримую ділення на нульовий виняток: int d = 0; d /= d; Я очікував отримати ділення на нульовий виняток, але замість цього d == 1 . Чому не d /= dвикидає ділення на нульовий виняток, коли d == 0?

3
Чи є a ^ a чи aa невизначеною поведінкою, якщо a не ініціалізовано?
Розглянемо цю програму: #include <stdio.h> int main(void) { unsigned int a; printf("%u %u\n", a^a, a-a); return 0; } Це невизначена поведінка? На перший погляд, aце неініціалізована змінна. Це вказує на невизначену поведінку. Але a^aі a-aрівні 0для всіх значень a, принаймні я думаю, що це так. Чи можливо, що існує якийсь …

4
Помилка компіляції C ++?
У мене є такий код: #include <iostream> #include <complex> using namespace std; int main() { complex<int> delta; complex<int> mc[4] = {0}; for(int di = 0; di < 4; di++, delta = mc[di]) { cout << di << endl; } return 0; } Я очікую, що він виведе "0, 1, 2, …

10
Підписане переповнення C ++ та невизначена поведінка (UB)
Мені цікаво про використання коду, як описано нижче int result = 0; int factor = 1; for (...) { result = ... factor *= 10; } return result; Якщо цикл повторюється в nрази, то factorвін множиться на 10точно nрази. Однак factorвикористовується лише коли-небудь, помноживши їх 10на загальну кількість n-1разів. Якщо …

3
Чи приріст покажчика на динамічний масив розміром 0 не визначений?
AFAIK, хоча ми не можемо створити масив статичної пам'яті розміром 0, але ми можемо це зробити з динамічними: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined Як я читав, він pдіє як елемент "минулого кінця". Я можу надрукувати адресу, на яку pвказує. if(p) cout << …

7
Як працює порівняння вказівників у С? Чи нормально порівнювати покажчики, які не вказують на один і той же масив?
У розділі 5 K&R (Мова програмування на C) я прочитав наступне: По-перше, покажчики можуть бути порівняні за певних обставин. Якщо pі qвказують на елементи одного і того ж масиву, то співвідношення подобається ==, !=, <, >=і т.д. працювати належним чином. Що, мабуть, означає, що можна порівняти лише вказівники, що вказують …

2
Дивна поведінка з полями класів при додаванні до std :: vector
Я знайшов дуже дивну поведінку (на кланг та GCC) у наступній ситуації. У мене вектор, nodesз одним елементом, екземпляр класу Node. Потім я викликаю функцію, nodes[0]яка додає нове Nodeу вектор. Коли додається новий Вузол, поля виклику об'єкта скидаються! Однак вони, здається, знову повертаються до норми, коли функція закінчена. Я вважаю, …

4
Копіювання конструкцій з неініціалізованими членами
Чи дійсно копіювати структуру, частина членів якої не ініціалізована? Я підозрюю, що це не визначена поведінка, але якщо так, то це робить залишати будь-яких неініціалізованих членів структури (навіть якщо ці члени ніколи не використовуються безпосередньо) досить небезпечно. Тож мені цікаво, чи є щось у стандарті, що це дозволяє. Наприклад, чи …

3
Чи має еквівалент std :: менше від C ++?
Нещодавно я відповідав на запитання щодо невизначеної поведінки p < qв C pі коли qвказують на різні об'єкти / масиви. Це змусило мене задуматися: C ++ має таку саму (невизначену) поведінку <в цьому випадку, але також пропонує стандартний шаблон бібліотеки, std::lessякий гарантовано повертає те саме, що і <тоді, коли покажчики …

1
Чому констатаційна функція дозволяє визначати не визначену поведінку?
В C ++ існує дуже акуратна властивість константних виразів: їх оцінка не може мати визначеної поведінки ( 7.7.4.7 ): Вираз e - основний постійний вираз, якщо тільки оцінка e, дотримуючись правил абстрактної машини ([intro.execution]), не оцінила б одне з наступних: ... операція, яка мала б не визначену поведінку, як зазначено …

2
Це програма, яка ніколи не припиняє дійсну програму C ++?
Чи потрібно програму припинити? Іншими словами, це програма, яка працює вічно технічно Undefined Behavior? Зауважте, це не про порожні петлі. Якщо говорити про програми, які назавжди "наповнюють" (тобто спостерігається поведінка). Наприклад, щось подібне: int main() { while (true) { try { get_input(); // calls IO process(); put_output(); // calls IO, …

3
Виклик функції з покажчиком на non-const і вказівником на const аргументи однієї адреси
Я хочу написати функцію, яка вводить масив даних і виводить інший масив даних за допомогою покажчиків. Мені цікаво, що це результат, якщо обидва srcі dstвказали на одну і ту ж адресу, тому що я знаю, що компілятор може оптимізувати const. Це невизначена поведінка? (Я позначив як C, так і C …

1
Можлива невизначена поведінка в примітивній реалізації static_vector
tl; dr: Я думаю, що мій static_vector має невизначену поведінку, але я не можу його знайти. Ця проблема стосується Microsoft Visual C ++ 17. У мене є така проста і незавершена реалізація static_vector, тобто вектор з фіксованою ємністю, який можна виділити стеком. Це програма C ++ 17, використовуючи std :: …

1
Чи є `string.assign (string.data (), 5)` чітко визначеним або UB?
Співробітник хотів написати це: std::string_view strip_whitespace(std::string_view sv); std::string line = "hello "; line = strip_whitespace(line); Я сказав, що повернення string_viewзробило мене неспокійно апріорі , і, крім того, псевдонім тут для мене був схожим на UB. Я можу з упевненістю сказати, що line = strip_whitespace(line)в даному випадку рівнозначно line = std::string_view(line.data(), …


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