Вопросы с тегом «c++»

C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который будет скомпилирован с помощью компилятора C ++). Используйте тег, зависящий от версии, для вопросов, связанных с конкретной редакцией стандарта [C ++ 11], [C ++ 14], [C ++ 17] или [C ++ 20] и т. Д.

1
Что предотвращает перекрытие смежных членов в классах?
Рассмотрим следующие три structс: class blub { int i; char c; blub(const blub&) {} }; class blob { char s; blob(const blob&) {} }; struct bla { blub b0; blob b1; }; На типовых платформах, где int4 байта, размеры, выравнивания и общее заполнение 1 следующие: struct size alignment padding -------- …

1
Как менеджеры пакетов Linux будут обрабатывать модули C ++ 20?
Мы находимся в 2020 году, и C ++ 20 идет вместе с долгожданной функцией модулей C ++. Но после просмотра нескольких выступлений на CppCon я обнаружил, что модули C ++ находятся в странном месте, особенно для менеджеров пакетов Linux (pacman, apt, emerge и т. Д.) Из того, что я узнал, …

2
Почему переменная enum здесь является значением?
Пример: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } Я получаю следующую ошибку при компиляции: <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' …

1
Публичный псевдоним для непубличного типа
Интересно, действительно ли это C ++: class Test { struct PrivateInner { PrivateInner(std::string const &str) { std::cout << str << "\n"; } }; public: using PublicInner = PrivateInner; }; //Test::PrivateInner priv("Hello world"); // Ok, private so we can't use that Test::PublicInner publ("Hello World"); // ?, by using public alias we …

1
Невозможно полностью определить имя класса в внеклассном объявителе определения функции
Эта программа приводит к нежелательному тупику разбора: struct float4x4 {}; class C { float4x4 M(); }; float4x4 ::C::M() { return float4x4{}; } : 8: 1: ошибка: нет члена с именем 'C' в 'float4x4'; Вы имели в виду просто «С»? float4x4 :: C :: M () ^ ~~~~~~~~~~~ Который может быть …

5
Эффективная стабильная сумма упорядоченных чисел
У меня есть довольно длинный список положительных чисел с плавающей точкой ( std::vector<float>, размер ~ 1000). Числа отсортированы в порядке убывания. Если я суммирую их в следующем порядке: for (auto v : vec) { sum += v; } Я предполагаю, что у меня может быть некоторая проблема с числовой стабильностью, …

2
Инициализация вектора атомности
Рассматривать: void foo() { std::vector<std::atomic<int>> foo(10); ... } Содержимое foo теперь действительно? Или мне нужно явно выполнить цикл и инициализировать их? Я проверил на Godbolt, и, кажется, все в порядке, однако стандарт кажется очень запутанным в этом вопросе. Конструктор std :: vector говорит, что он вставляет вставленные по умолчанию экземпляры …
12 c++  vector  atomic 

2
Передача концепции в функцию
Поскольку понятия определены как предикаты времени компиляции, возможно ли также фактически использовать эти предикаты для алгоритмов времени компиляции? Например, можно ли проверить, все ли типы в кортеже соответствуют концепции? Насколько я видел, невозможно передать концепцию какой-либо функции, что побуждает меня вернуться к использованию шаблонов для этих случаев. #include <type_traits> template<typename …


1
Почему этот код так долго компилируется с g ++?
Рассмотрим следующий код: template<int i> class A { typedef A<i-1> B; B x, y; }; template<> class A<0> { char m; }; int main() { A<LEVEL> a; } При тестировании его компиляции с помощью g ++ с помощью следующей команды Bash (с g ++ 8.3.0) for ((level=1; level<30; ++level)); do …

1
Могут ли быть разные неявные объекты, основанные на более позднем решении времени выполнения в C ++ 20?
Этот вопрос относится к добавлению P0593 к последней версии C ++ 20 . Вот мой пример: #include <cstdlib> #include <cstdio> void foo(void *p) { if ( std::getchar() == 'i' ) { *(int *)p = 2; std::printf("%d\n", *(int *)p); } else { *(float *)p = 2; std::printf("%f\n", *(float *)p); } } …

4
Прерывание изменений в C ++ 20 или регрессия в clang-trunk / gcc-trunk при перегрузке сравнения равенства с небулевым возвращаемым значением?
Следующий код прекрасно компилируется с clang-trunk в режиме c ++ 17, но прерывается в режиме c ++ 2a (предстоящий c ++ 20): // Meta struct describing the result of a comparison struct Meta {}; struct Foo { Meta operator==(const Foo&) {return Meta{};} Meta operator!=(const Foo&) {return Meta{};} }; int main() …

3
Разница между std :: resize (n) и std :: shrink_to_fit в C ++?
Я сталкивался с этими утверждениями: resize(n)- Изменяет размер контейнера так, чтобы он содержал «n» элементов. shrink_to_fit()- Уменьшает емкость контейнера до его размера и уничтожает все элементы, превышающие емкость. Есть ли существенная разница между этими функциями? они попадают под векторы в C ++

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(), 5). …

1
Современный подход к созданию std :: vector для выравнивания памяти
Следующий вопрос связан, однако ответы на старые, и комментарий от пользователя Marc Glisse предполагает , что есть новые подходы , начиная с C ++ 17 к решению этой проблемы , которые не могут быть адекватно обсуждены. Я пытаюсь выровнять память, работающую правильно для SIMD, при этом все еще имея доступ …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.