Вопросы по теме 'language-lawyer'

Возьмите адрес элемента массива с одним концом через нижний индекс: разрешено стандартом C ++ или нет?
Я видел, как несколько раз утверждалось, что следующий код не разрешен стандартом C ++: int array[5]; int *array_begin = &array[0]; int *array_end = &array[5]; Является ли &array[5] законным код C ++ в этом контексте? Я хотел...
7777 просмотров
schedule 15.11.2022

Как типы массивов и указателей обрабатываются внутри компиляторов C? ( int *a; против int a[]; )
Мне нужен языковой юрист с авторитетными источниками. Взгляните на следующую тестовую программу, которая корректно компилируется под gcc: #include <stdio.h> void foo(int *a) { a[98] = 0xFEADFACE; } void bar(int b[]) { *(b+498)...
4532 просмотров
schedule 07.08.2022

трансляция через void * вместо использования reinterpret_cast
Я читаю книгу и обнаружил, что reinterpret_cast не следует использовать напрямую, а лучше использовать преобразование в void * в сочетании с static_cast : T1 * p1=... void *pv=p1; T2 * p2= static_cast<T2*>(pv); Вместо: T1 *...
6658 просмотров

Каковы действительные подписи для функции C main ()?
Каковы на самом деле действительные подписи для основной функции в C? Я знаю: int main(int argc, char *argv[]) Есть ли другие действующие?
46877 просмотров

Когда вызов функции-члена для нулевого экземпляра приводит к неопределенному поведению?
Рассмотрим следующий код: #include <iostream> struct foo { // (a): void bar() { std::cout << "gman was here" << std::endl; } // (b): void baz() { x = 5; } int x; }; int main() { foo* f = 0;...
15541 просмотров

Какая формулировка в стандарте C ++ допускает static_cast ‹non-void-type *› (malloc (N)); работать?
Насколько я понимаю формулировку в 5.2.9 Статическое приведение, разрешен результат преобразования void* в указатель на объект только тогда, когда void* изначально был результатом обратного преобразования. В стандарте есть множество ссылок на...
1522 просмотров

Представление отрицательных чисел в C?
Как C представляет отрицательные целые числа? Это представление в виде дополнения до двух или с помощью MSB (старший бит)? -1 в шестнадцатеричном формате - это ffffffff . Так что, пожалуйста, проясните это для меня.
21165 просмотров

анонимные пустые немаркированные классы, структуры, объединения и перечисления
! Заявление об ограничении ответственности! Обратите внимание, что я говорю о немаркированных декларациях. Я знаю, что это, возможно, неформальный термин, и я имею в виду то, что объявление не является typedef и не объявляет объект анонимного...
625 просмотров
schedule 02.04.2023

Гарантируется ли, что long будет не менее 32 бит?
Читая Стандарт C ++, я всегда понимал, что размеры интегральных фундаментальных типов в C ++ следующие: sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int) Я вывел это из 3.9.1 / 2: Существует четыре...
12904 просмотров

Возможна ли нулевая ссылка?
Действителен ли этот фрагмент кода (и определено ли поведение)? int &nullReference = *(int*)0; И g ++, и clang ++ компилируют его без предупреждения, даже при использовании -Wall , -Wextra , -std=c++98 , -pedantic , _6 _......
127811 просмотров
schedule 17.03.2023

Отличаются ли эти два синтаксиса инициализатора С++ по семантике?
Предположим, что следующий код является допустимым кодом, который правильно компилируется, что T — это имя типа, а x — это имя переменной. Синтаксис один: T a(x); Синтаксис два: T a = x; Различается ли когда-либо точная...
401 просмотров

Может ли компилятор С++ предположить, что const bool & value не изменится?
Может ли компилятор С++ предположить, что значение «const bool &» не изменится? Например, представьте, что у меня есть класс: class test { public: test(const bool &state) : _test(state) { } void doSomething() { if (_test) {...
2467 просмотров

Будет ли std::string всегда заканчиваться нулем в С++ 11?
В сообщении 2008 года на своем сайте Херб Саттер заявляет следующее: Существует активное предложение еще больше ужесточить это в C++0x и потребовать нулевого завершения и, возможно, запретить реализации копирования при записи по причинам,...
9187 просмотров

Почему нет заголовка ‹stlfwd› и можно ли считать его отсутствие дефектом?
Стандартная библиотека включает заголовок <iosfwd> , который (вперед) объявляет все потоки, включая любые typedef , и определяет шаблон char_traits , включая специализации. К сожалению, нет такого заголовка <stlfwd> , который...
811 просмотров

Зачем использовать пространство имен X; не допускается на уровне класса / структуры?
class C { using namespace std; // error }; namespace N { using namespace std; // ok } int main () { using namespace std; // ok } Изменить : хотите узнать, что за этим стоит.
61016 просмотров
schedule 21.07.2022

представление ловушки
Что такое «представление ловушки» в C (могут помочь некоторые примеры)? Применимо ли это к C ++? Учитывая этот код ... float f=3.5; int *pi = (int*)&f; ... и если предположить, что sizeof(int) == sizeof(float) , имеют ли f и...
14929 просмотров

Могу ли я по умолчанию использовать частный конструктор в теле класса или нет?
GCC 4.5 не позволяет мне сделать это: class foo { public: foo() = default; private: foo(foo const&) = default; foo& operator=(foo const&) = default; }; Он жалуется, что: ошибка: 'foo::foo(const foo&)',...
359 просмотров

Подразумевает ли вызов pthread_cond_signal или pthread_cond_broadcast барьер записи в память?
Переменные условия обычно используются таким образом, что состояние, на которое они ссылаются, модифицируется мьютексом. Однако, когда состояние представляет собой всего лишь один флаг только для установки, нет необходимости в мьютексе для...
2554 просмотров

Точки последовательности и порядок оценки
Я читал K&R и наткнулся на этот пример о неопределенности в поведении при оценке выражения вроде a[i]=i++ ; Спецификация C99 в $ 6.5.2 говорит, что Между предыдущей и следующей точкой последовательности сохраненное значение объекта должно...
442 просмотров
schedule 27.07.2023

Является ли неопределенным поведением формирование диапазона указателей из адреса стека?
Некоторые программисты на C или C++ с удивлением обнаруживают, что даже сохранение недопустимого указателя это неопределенное поведение . Однако для массивов кучи или стека можно хранить адрес единицы после конца массива, что позволяет сохранять...
793 просмотров