Результаты поиска по запросу "undefined-behavior"
Почему эта реализация strlen () работает?
(Отказ от ответственности: я виделэтот вопрос [https://stackoverflow.com/questions/11787810/strlen-performance-implementation] и я не переспрашиваю - меня интересуетПочемукод работает, ине вкаконо ...
Тип может иметь представления ловушек, это может быть UB, если представление знака является дополнением.
отрим следующую C-программу: #include <stdio.h> int main(){ int a =-1; unsigned b=-1; if(a==b) printf("%d %d",a,b); else printf("Unequal"); return 0; }В соответствииprintf("%d %d",a,b);, "%d" используется для печати беззнакового типа. Это ...
Это означает что-то вроде «съедение циклов процессора не является побочным эффектом». Код, который не имеет побочных эффектов, кроме использования ЦП, и не дает значения, которое будет использовано позже, не должен запускаться вообще. Реализация свободна решать, запускать этот код или нет. Это, однако, не получить заказ пиццы.
+ 11, как бесконечный цикл без побочных эффектов, следующая программа - UB: int main() { while (true) {} }Является ли следующее также UB? void foo() { foo(); } int main() { foo(); }Цитаты из стандарта для обеих программ были бы идеальными.
Арифметическое смещение вправо дает фиктивный результат?
Я должен быть абсолютно сумасшедшим здесь, ноgcc 4.7.3 на моей машине дает самый абсурдный результат. Вот точный код, который я тестирую: #include <iostream> using namespace std; int main(){ unsigned int b = 100000; cout << (b>>b) << endl; b = b ...
v - это двумерный массив. Поскольку вы ссылаетесь только на одно измерение, то в итоге вы получаете указатель char на базовый массив, и, следовательно, этот оператор пытается присвоить константу char указателю char. Вы можете использовать двойные кавычки, чтобы заменить константу на строку в стиле C, или вы можете явно ссылаться на v [i] [0], что я и предполагал.
еопределенное поведение, если я прохожу элементы 2D-массива следующим образом? int v[5][5], i; for (i = 0; i < 5*5; ++i) { v[i] = i; }Опять же, это даже компилируется? (Я не могу попробовать это прямо сейчас, я не дома.) Если это не так, то ...
Срок действия кода
Рассмотрим следующий код: void populate(int *arr) { for(int j=0;j<4;++j) arr[j]=0; } int main() { int array[2][2]; populate(&array[0][0]); }Об этом говорилось в местном сообществе, является ли код действительным или нет (я должен упомянуть его ...
Оба случая в ответе выше приводят к UB. В общем, идиомы следует избегать, потому что есть так много разных способов, которые могут привести к UB.
т мой вопрос@DeadMG говорит, что реинициализация класса через [https://stackoverflow.com/questions/6036086/is-it-valid-to-directly-call-a-virtual-destructor] указатель является неопределенным поведением. Есть ли где-нибудь упоминание об этом в ...
Как сопряжение new [] с delete может привести только к утечке памяти?
Прежде всего, используяdelete за все, что выделеноnew[] является неопределенным поведением в соответствии со стандартом C ++. В Visual C ++ 7 такое спаривание может привести к одному из двух последствий. Если тип new [] 'ed имеет тривиальный ...
Список инициализаторов * аргумент * порядок оценки
оведение хорошо определено? class Foo { int A, B; public: Foo(int Bar): B(Bar), A(B + 123) { } }; int main() { Foo MyFoo(0); return 0; }
Может ли объект, выделенный в куче, быть константным в C ++?
В C ++ объект, выделенный из стека, может быть объявленconst: const Class object;после этого попытка вызова неконстантного метода для такого объекта является неопределенным поведением: const_cast<Class*>( &object )->NonConstMethod(); //UBМожет ...