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

18
Значения лямбда-замыкания могут быть переданы как ссылочные параметры rvalue.

Я обнаружил, что lvalueлямбда-замыкания всегда можно передать в качестве rvalueпараметров функции. Смотрите следующую простую демонстрацию. #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1:...

18
Как разрешить висячий const ref

Следующая короткая программа #include <vector> #include <iostream> std::vector<int> someNums() { return {3, 5, 7, 11}; } class Woop { public: Woop(const std::vector<int>& nums) : numbers(nums) {} void report() { for (int i : numbers) std::cout << i << ' ';...

17
Любые ошибки заменить глобальный const char [] на constexpr string_view?

Наша команда работает с базой кода C ++ более 10 лет и недавно перешла на компилятор C ++ 17. Поэтому мы ищем способы модернизировать наш код. В ходе конференции на YouTube я услышал предложение заменить const char*глобальные строки на constexpr string_view. Поскольку const char*в нашем коде есть...

17
Есть ли способ установить Valgrind на Catalina?

Есть ли способ установить Valgrind на Catalina и правильно ли он работает? Если это так, я был бы очень признателен за пошаговый процесс. Я попытался установить Valgrind с https://github.com/sowson/valgrind, но когда я проверил helloWorld.cppна терминале, консоль вернула ошибки, которые я не должен...

17
Правильно ли Clang отклонять код, в котором вложенный класс шаблона класса определяется только через специализации?

Дан следующий шаблон класса: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; мы определяем Innerотдельно для каждой специализации Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; а затем определить...

17
Это старый конструктор в стиле C ++?

Здесь кусок кода C ++. В этом примере многие блоки кода выглядят как вызовы конструктора. К сожалению, блочного кода № 3 нет (это можно проверить с помощью https://godbolt.org/z/q3rsxn и https://cppinsights.io ). Я думаю, что это старая нотация C ++, и она может объяснить введение новой нотации...

17
Почему стандарт C ++ обрабатывает файл в поисках так, как он это делает?

C ++ использует streamoffтип для представления смещения внутри (файлового) потока и определяется следующим образом в [stream.types]: using streamoff = implementation-defined ; Тип streamoff является синонимом одного из подписанных базовых целочисленных типов достаточного размера, чтобы представить...

17
Прыжки через переменную инициализации плохо сформированы или это вызывает неопределенное поведение?

Рассмотрим этот код: void foo() { goto bar; int x = 0; bar: ; } GCC и Clang отклоняют это , потому что переход к bar:обходу инициализации переменной. MSVC вообще не жалуется (кроме случаев, xкогда bar:вызывает предупреждение). Мы можем сделать аналогичную вещь с switch: void foo() { switch (0) {...

17
Непрерывное перечисление C ++ 11

Есть ли способ проверить в C ++ 11, является ли перечисление непрерывным ? Полностью допустимо указывать значения enum, которых нет. Есть ли такая особенность, как черта типа в C ++ 14, C ++ 17 или, может быть, C ++ 20, чтобы проверить, является ли enum непрерывным? Это будет использоваться в...

17
Оператор new () ведет себя по-разному, когда оператор delete () удаляется в зависимости от существования конструктора по умолчанию

Создание нового объекта класса C с оператором new () выдает здесь ошибку: class C { public: C() {} virtual ~C() {} void operator delete(void*) = delete; }; int main() { C* c = new C; } с C2280: 'void C::operator delete(void *)': function was explicitly deleted Но когда я заменяю C() {} с C() =...

16
Почему функция conteval допускает неопределенное поведение?

В C ++ есть очень удобное свойство константных выражений: их оценка не может иметь неопределенного поведения ( 7.7.4.7 ): Выражение e является основным константным выражением, если при вычислении e, следуя правилам абстрактной машины ([intro.execution]), не будет выполнено одно из следующих...

16
Почему деструктор не вызывается в операторе удаления?

Я пытался вызвать ::deleteкласс в operator deleteэтом. Но деструктор не называется. Я определил класс MyClass, operator deleteкоторый был перегружен. Глобал operator deleteтакже перегружен. Перегруженный operator deleteиз MyClassбудет вызывать перегруженный глобальный operator delete. class MyClass...

16
Catalina C ++: использование заголовков <cmath> приводит к ошибке: в глобальном пространстве имен нет члена с именем signbit

После обновления до Каталины из Мохаве, настройка: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk в env. Я не могу скомпилировать программу, которая использует <cmath>заголовок. Я попытался изменить CFLAGS, CCFLAGS, CXXFLAGS, чтобы они...

16
[[no_unique_address]] и два значения элемента одного типа

Я играю с [[no_unique_address]]в c++20. В примере на cppreference у нас есть пустой тип Emptyи типZ struct Empty {}; // empty class struct Z { char c; [[no_unique_address]] Empty e1, e2; }; Видимо, размер Zдолжен быть хотя бы 2потому, что типы e1и e2одинаковы. Тем не менее, я действительно хочу...