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

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

1
GCC реализация угловых скобок включает в себя. Почему это должно быть так, как описано ниже?
Этот документ в разделе 2.6 «Вычисленные включения» имеет следующий параграф: Если строка расширяется до потока токенов, начинающегося с токена <и включающего токен>, то токены между <и первым> объединяются, чтобы сформировать имя файла для включения. Любой пробел между токенами сводится к одному пробелу; тогда любой пробел после начального <сохраняется, но завершающий …
11 c++  c  gcc  language-lawyer 


1
Законно ли инициализировать массив в конструкторе constexpr?
Является ли следующий код законным? template <int N> class foo { public: constexpr foo() { for (int i = 0; i < N; ++i) { v_[i] = i; } } private: int v_[N]; }; constexpr foo<5> bar; Clang принимает это, но GCC и MSVC отклоняют это. Ошибка GCC: main.cpp:15:18: error: …

1
Почему static_cast необходим в реализации gcc is_nothrow_constructible?
Взято из GCC реализации, type_traitsзачем static_castздесь нужно? template <typename _Tp, typename... _Args> struct __is_nt_constructible_impl : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))> {}; template <typename _Tp, typename _Arg> struct __is_nt_constructible_impl<_Tp, _Arg> : public integral_constant<bool, // Why is `static_cast` needed here? noexcept(static_cast<_Tp>(declval<_Arg>()))> {};

1
Эффективный алгоритм усечения строк, последовательно удаляющий одинаковые префиксы и суффиксы
Ограничение времени на тест: 5 секунд Ограничение памяти на тест: 512 мегабайт Вам дана строка sдлины n( n≤ 5000). Вы можете выбрать любой правильный префикс этой строки, который также является ее суффиксом, и удалить либо выбранный префикс, либо соответствующий суффикс. Затем вы можете применить аналогичную операцию к результирующей строке и …

3
Как узнать, какие функции генерирует компилятор?
Я знаю о сгенерированных компилятором функциях, правило трех и правило пяти. В реальных сценариях может оказаться нетривиальным выяснить, какие именно функции, сгенерированные компилятором (конструкторы, операторы присваивания, деструктор) были фактически созданы компилятором. Есть ли способ перечислить сгенерированные компилятором функции для определенного класса? Меня в первую очередь интересуют Visual Studio 2019 и …
11 c++  c++11 

1
Неквалифицированный sort () - почему он компилируется при использовании на std :: vector, а не на std :: array, и какой компилятор корректен?
При звонке std::sort()на std::array: #include <vector> #include <array> #include <algorithm> int main() { std::vector<int> foo{4, 1, 2, 3}; sort(begin(foo), end(foo)); std::array<int, 4> foo2{4, 1, 2, 3}; sort(begin(foo2), end(foo2)); } И gcc, и clang возвращают ошибку в сортировке std::array- clang говорит ошибка: использование необъявленного идентификатора 'sort'; Вы имели в виду 'std …
11 c++  c++17 

2
Как найти поддельные операции копирования C ++?
Недавно у меня было следующее struct data { std::vector<int> V; }; data get_vector(int n) { std::vector<int> V(n,0); return {V}; } Проблема с этим кодом заключается в том, что при создании структуры происходит копирование, и вместо этого нужно написать return return {std :: move (V)} Есть ли линтер или анализатор кода, …

2
Должен ли T быть полным типом для использования в `std :: declval <T>`?
Рассмотрим этот пример ( отсюда ): #include &lt;type_traits&gt; #include &lt;iostream&gt; template &lt;typename U&gt; struct A { }; struct B { template &lt;typename F = int&gt; A&lt;F&gt; f() { return A&lt;F&gt;{}; } using default_return_type = decltype(std::declval&lt;B&gt;().f()); }; int main() { B::default_return_type x{}; std::cout &lt;&lt; std::is_same&lt; B::default_return_type, A&lt;int&gt;&gt;::value; } Он компилируется без …

1
std :: function const правильность
Предположим, у меня есть вызываемый тип, например: struct mutable_callable { int my_mutable = 0; int operator()() { // Not const return my_mutable++; } }; Обратите внимание, что mutable_callableесть неконстантный, operator()который изменяет переменную-член ..... Теперь предположим, что я создал std::functionиз моего типа: std::function&lt;int()&gt; foo = mutable_callable{}; Теперь я могу сделать это: …

5
Гарантируется ли деструктор локального объекта внутри цикла перед следующей итерацией?
Когда у меня есть цикл, и внутри этого цикла создается новая переменная стека (без выделения ее в куче и переменной, содержащей ее, объявленной внутри тела цикла), гарантированно вызывается деструктор этого объекта перед началом следующей итерации, или может Развертывание цикла компилятором что-то изменит?
11 c++  destructor 

1
Можно ли изменить встроенную переменную после инициализации в C ++ 17?
Мой сценарий следующий (он работал в Clang, но не в GCC) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp: (dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); Проблема в том, что встроенная переменная показывала 0 в тех местах, где я ожидал 28, потому что она была …
11 c++  visual-c++  dll  clang  c++17 

1
Может ли span быть constexpr?
Все конструкторы std :: span объявлены constexpr, однако я не могу заставить их работать в контексте constexpr. Раскомментирование любого из constexpr ниже приведет к ошибке компиляции. #include &lt;array&gt; #include &lt;span&gt; int main() { constexpr int carray[3] = { 0, 1, 2 }; constexpr std::array&lt;int, 3&gt; array{ 0, 1, 2 }; …
11 c++  constexpr  c++20 


5
Я могу определить длину массива с помощью константы, так почему же не работает int d [b]?
int a = 5; const int b = a, c = 4; int e[a]; int d[b]; int f[c]; Определение f[c]является действительным. Переменная bтакже является константой int, но компилятор выдал ошибку «выражение должно иметь постоянное значение» для строки int d[b]. Каковы различия между bи c?
11 c++ 

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