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

11
Может ли переменный шаблон передаваться как аргумент шаблона шаблона?

Следующий бессмысленный пример не компилируется, но есть ли другой способ передать шаблон переменной в качестве аргумента шаблона шаблона? template<typename T> constexpr auto zero = T{0}; template<typename T, template<typename> auto VariableTemplate> constexpr auto add_one() {...

11
Вызов лямбда неоднозначен, несмотря на явное указание типа возврата

Перегруженная функция должна принимать оба функтора, учитывая, что тип лямбды можно разрешить (можно преобразовать в std::function(пожалуйста, исправьте меня, если я ошибаюсь). Вопрос в том, почему ниже приведена ошибка компиляции, несмотря на то, что лямбда-тип явно определен? ( [&]() ->...

11
Я могу определить длину массива с помощью константы, так почему же не работает 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и...

11
Может ли span быть constexpr?

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

11
std :: function const правильность

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

11
Можно ли изменить встроенную переменную после инициализации в 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 в тех местах, где я...

11
Гарантируется ли деструктор локального объекта внутри цикла перед следующей итерацией?

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

11
Как найти поддельные операции копирования 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)}...

11
Неквалифицированный 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 возвращают ошибку...

11
Как узнать, какие функции генерирует компилятор?

Я знаю о сгенерированных компилятором функциях, правило трех и правило пяти. В реальных сценариях может оказаться нетривиальным выяснить, какие именно функции, сгенерированные компилятором (конструкторы, операторы присваивания, деструктор) были фактически созданы компилятором. Есть ли способ...

11
Законно ли инициализировать массив в конструкторе 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: 'constexpr...

11
Эффективный алгоритм усечения строк, последовательно удаляющий одинаковые префиксы и суффиксы

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

11
Современный подход к созданию std :: vector для выравнивания памяти

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