Запитання з тегом «c++»

C ++ - мова програмування загального призначення. Спочатку він був розроблений як розширення до C і має подібний синтаксис, але зараз це зовсім інша мова. Використовуйте цей тег для запитань про код (який потрібно) зібрати за допомогою компілятора C ++. Використовуйте тег, що стосується версії, для питань, пов’язаних із конкретною стандартною редакцією [C ++ 11], [C ++ 14], [C ++ 17] або [C ++ 20] тощо.

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)); …

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); } } int …

4
Порушення зміни C ++ 20 або регресія в clang-trunk / gcc-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(), …

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

1
Реалізація кутових дужок GCC включає в себе. Чому це має бути таким, як описано нижче?
Цей документ у розділі 2.6 Computed Includes має такий параграф: Якщо рядок розширюється до потоку токенів, що починається з <лексеми і включає> маркер, то лексеми між <і першим> об'єднуються, щоб утворювати ім'я файлу, яке потрібно включити. Будь-який пробіл між маркерами зводиться до одного простору; то будь-який простір після початкового <зберігається, …
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; Кланг приймає це, але GCC та MSVC відкидають це. Помилка GCC: main.cpp:15:18: error: 'constexpr …

1
Чому static_cast потрібен при впровадженні gcc в програмі is_nothrow_constructible?
type_traitsЧому випливає з реалізації GCC, навіщо це 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>()))> {};

3
Як дізнатися, які функції генерував компілятор?
Я знаю про функції, створені компілятором, правило три та правило п'ять. У реальних сценаріях може бути неправдивим, щоб точно визначити, які з функцій, створених компілятором (конструктори, оператори присвоєння, деструктор), були створені компілятором. Чи є якийсь спосіб перерахувати створені компілятором функції для конкретного класу? Мене насамперед цікавлять Visual Studio 2019 та …
11 c++  c++11 

1
Ефективний алгоритм обрізання рядків, послідовно видаляючи рівні префікси та суфікси
Ліміт часу на тест: 5 секунд Ліміт пам’яті за тест: 512 мегабайт Вам надається рядок sдовжини n(n ≤ 5000). Ви можете вибрати будь-який власний префікс цього рядка, який також є його суфіксом, і видалити або обраний префікс, або відповідний суфікс. Потім ви можете застосувати аналогічну операцію до отриманого рядка тощо. …

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 помилка: використання незадекларованого ідентифікатора 'сортування'; ви мали на увазі '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 {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; } Він компілюється без …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.