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

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

2
Це програма, яка ніколи не припиняє дійсну програму C ++?
Чи потрібно програму припинити? Іншими словами, це програма, яка працює вічно технічно Undefined Behavior? Зауважте, це не про порожні петлі. Якщо говорити про програми, які назавжди "наповнюють" (тобто спостерігається поведінка). Наприклад, щось подібне: int main() { while (true) { try { get_input(); // calls IO process(); put_output(); // calls IO, …

2
Чому std :: swap не позначений constexpr перед C ++ 20?
В C ++ 20, std::swap стає constexprфункцією. Я знаю, що стандартна бібліотека дійсно відставала від мови в маркуванні речей constexpr, але до 2017 року <algorithm>була в значній мірі контекспр, як і купа інших речей. І все ж -std::swap не було. Я туманно пам'ятаю, що там був якийсь дивний мовний дефект, …

2
Чи дійсно зберігання std :: chrono :: років принаймні 17 біт?
З cppreference std::chrono::years (since C++20) duration</*signed integer type of at least 17 bits*/, std::ratio<31556952>> Використовуючи libc++це здається , що підкреслює зберігання std::chrono::yearsIS , shortякий підписана 16 біт . std::chrono::years( 30797 ) // yields 32767/01/01 std::chrono::years( 30797 ) + 365d // yields -32768/01/01 apparently UB Чи є друкарська помилка на cppreference …
14 c++  chrono  c++20  libc++ 

3
Виклик функції з покажчиком на non-const і вказівником на const аргументи однієї адреси
Я хочу написати функцію, яка вводить масив даних і виводить інший масив даних за допомогою покажчиків. Мені цікаво, що це результат, якщо обидва srcі dstвказали на одну і ту ж адресу, тому що я знаю, що компілятор може оптимізувати const. Це невизначена поведінка? (Я позначив як C, так і C …

3
Сортування вектора у порядку зменшення у межах двох діапазонів
Скажіть, у мене є вектор цілих чисел: std::vector<int> indices; for (int i=0; i<15; i++) indices.push_back(i); Потім я сортую це у порядку зменшення: sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];}) for (int i=0; i<15; i++) printf("%i\n", indices[i]); Це призводить до наступного: 14 13 12 11 10 9 …

1
Clang не компілює код, але gcc та msvc зібрали його
Я не розумію, в чому проблема: ні в моєму коді, ні в компіляторі (менш можливо). Існує такий фрагмент коду: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, std::void_t<typename T::dummy_iterator>> : …

2
Як вектор як ключ працює внутрішньо в C ++?
Ця відповідь відповідає, що STL-карта з вектором для ключа вектор може використовуватися як ключ. Отже, коли ми використовуємо вектор як ключ. Як це насправді працює, оскільки ключ повинен бути унікальним, тому коли ми вставляємо інший вектор з тими ж елементами, буде mapперевірка на повторність елемента за елементом чи ім'я вектора …
14 c++  arrays  dictionary  vector  stl 

1
Чому GCC не може припустити, що розмір std :: vector :: не зміниться в цьому циклі?
Я заявляв колезі, який if (i < input.size() - 1) print(0);би оптимізувався в цьому циклі, щоб input.size()його не читали в кожній ітерації, але виявляється, що це не так! void print(int x) { std::cout << x << std::endl; } void print_list(const std::vector<int>& input) { int i = 0; for (size_t i …
14 c++  gcc  assembly 

1
Чи можу я перерахувати-ініціалізувати std :: vector із ідеальним пересиланням елементів?
Я помітив, що ініталізація сукупного списку std :: vector виконує ініціалізацію копіювання, коли переміщення є більш застосовною. У той же час кілька emplace_backs роблять те, що я хочу. Я міг тільки придумати це недосконале рішення написання функції шаблону init_emplace_vector. Однак це оптимально лише для не явних однозначних конструкторів. template <typename …

1
Чому виділяється пам'ять стека, коли вона не використовується?
Розглянемо наступний приклад: struct vector { int size() const; bool empty() const; }; bool vector::empty() const { return size() == 0; } Створений код складання для vector::empty(за допомогою кланг, з оптимізаціями): push rax call vector::size() const test eax, eax sete al pop rcx ret Чому він виділяє стековий простір? Він …

1
Чому оптимізація порожньої бази заборонена, коли порожній базовий клас також є змінною члена?
Оптимізація порожньої бази чудова. Однак він поставляється із наступним обмеженням: Оптимізація порожньої бази забороняється, якщо одним із порожніх базових класів є також тип або база типу першого нестатичного члена даних, оскільки два базових суб'єкти одного типу повинні мати різні адреси в рамках представлення об'єкта найбільш похідного типу. Щоб пояснити це …

1
Чи є різниця двох екземплярів constexpr __func__ покажчиків досі constexpr?
Чи дійсно це C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC та MSVC вважають, що це нормально, Кланг вважає, що це не так: Compiler Explorer . Усі компілятори погоджуються, що це нормально: Провідник компілятора . int main() { constexpr auto p = …


1
Це помилка в std :: gcd?
Я натрапив на таку поведінку, std::gcdщо мені виявилося несподіваним: #include <iostream> #include <numeric> int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type<decltype(a), decltype(b)>::type; C ca = std::abs(a); C cb = b; std::cout << a << …

1
якщо constexpr - чому відхилена операція повністю перевірена?
Я возився з контестуванням c ++ 20 в GCC 10 і написав цей код #include <optional> #include <tuple> #include <iostream> template <std::size_t N, typename Predicate, typename Tuple> consteval std::optional<std::size_t> find_if_impl(Predicate&& pred, Tuple&& t) noexcept { constexpr std::size_t I = std::tuple_size_v<std::decay_t<decltype(t)>> - N; if constexpr (N == 0u) { return std::nullopt; …

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