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

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

1
Разрешено ли выражениям «требуется» захватывать переменные вмещающей области?
В следующем примере аргументы функции используются для проверки с помощью выражения require, правильно ли сформировано выражение, использующее их. Выражение require не имеет аргументов; он напрямую использует переменные в области действия функции: #include <cstddef> #include <vector> template<typename T> void Resize(T &v, std::size_t const n) { if constexpr (requires { v.resize(n); }) …

2
Мой компилятор игнорировал мой неиспользуемый статический член класса thread_local?
Я хочу сделать некоторую регистрацию потока в моем классе, поэтому я решил добавить проверку для этой thread_localфункции: #include <iostream> #include <thread> class Foo { public: Foo() { std::cout << "Foo()" << std::endl; } ~Foo() { std::cout << "~Foo()" << std::endl; } }; class Bar { public: Bar() { std::cout << …

2
Как убрать копию при создании цепочки?
Я создаю класс типа цепочки, такой как маленький пример ниже. Похоже, что при объединении функций-членов вызывается конструктор копирования. Есть ли способ избавиться от вызова конструктора копирования? В моем примере с игрушкой, приведенным ниже, очевидно, что я имею дело только с временными, и поэтому «должно» (возможно, не по стандартам, но логически) …
10 c++  c++14  c++17 

3
Почему не обязательно использовать typename для зависимых типов в следующем случае?
Я читал об удалении ссылки типа здесь . Это дает следующий пример: #include <iostream> // std::cout #include <type_traits> // std::is_same template<class T1, class T2> void print_is_same() { std::cout << std::is_same<T1, T2>() << '\n'; } int main() { std::cout << std::boolalpha; print_is_same<int, int>(); print_is_same<int, int &>(); print_is_same<int, int &&>(); print_is_same<int, std::remove_reference<int>::type>(); …

5
Динамическое связывание - Linux Vs. Windows
Под Windows, когда я компилирую код C / C ++ в проекте DLL в MSVC, я получаю 2 файла: MyDll.dll MyDll.lib где, насколько я понимаю, MyDll.libсодержит какую-то таблицу указателей с указанием расположения функций в dll. При использовании этой dll, скажем, в exe-файле, MyDll.libон внедряется в exe-файл во время компоновки, поэтому …


2
Как преобразовать числовые массивы в вектор <int> & (ссылка) с помощью SWIG
Моя цель: Создайте 3 пустых массива в python (2 из них будут инициализированы с конкретными значениями), затем отправьте все три из них через swig в функцию c ++ в виде векторных ссылок (это делается для того, чтобы избежать копирования данных и потери эффективности). Оказавшись в функции c ++, добавьте 2 …
10 python  c++  numpy  vector  swig 



2
Что происходит, если неопределенное поведение C ++ соответствует определенному поведению C?
У меня есть *.cppфайл, который я компилирую с C ++ (не компилятор C). Содержащая функция опирается на приведение (см. Последнюю строку), которое, кажется, определено в C (пожалуйста, исправьте, если я ошибаюсь!), Но не в C ++ для этого специального типа. [...] C++ code [...] struct sockaddr_in sa = {0}; int …


2
Допустимый синтаксис вызова псевдодеструктора для плавающей константы
Рассмотрим следующую демонстрационную программу. #include &lt;iostream&gt; int main() { typedef float T; 0.f.T::~T(); } Эта программа составлена Microsoft Visual Studio Community 2019. Но clangи gccвыдать ошибку, как это prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T' 7 | 0.f.T::~T(); | ^~~~~ Если написать выражение вроде, ( 0.f ).T::~T()то все …

3
Как избежать неявных преобразований из int (0) в указатель в векторе
Есть ситуация, когда я хочу собрать все имена узлов пути к ключу в JSON. Рассмотрим условие индекса массива «0», «1» также допускается, но легко забыть кавычки, которые могут привести к сбою при разыменовании. Поэтому я хочу отказаться от этого. Пример: #include &lt;vector&gt; #include &lt;iostream&gt; int func(const std::vector&lt;const char*&gt;&amp; pin) { …

2
Создание стандартных исключений с аргументом нулевого указателя и невозможными постусловиями
Рассмотрим следующую программу: #include&lt;stdexcept&gt; #include&lt;iostream&gt; int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&amp;) { std::cout &lt;&lt; "Caught!\n"; } } GCC и Clang с помощью libstdc ++ вызывают std::terminateи отменяют программу с сообщением terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid Clang с libc …

2
Могу ли я вернуть временный канал в операцию диапазона?
Предположим, у меня есть generate_my_rangeкласс, который моделирует range(в частности, есть regular). Тогда следующий код правильный: auto generate_my_range(int some_param) { auto my_transform_op = [](const auto&amp; x){ return do_sth(x); }; return my_custom_rng_gen(some_param) | ranges::views::transform(my_transform_op); } auto cells = generate_my_range(10) | ranges::to&lt;std::vector&gt;; Принимается my_custom_rng_gen(some_param)по значению (первым) оператором канала, или у меня есть свисающая …
9 c++  range-v3 

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