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

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

2
Чому ми не можемо створити тривіально сконструйовані об'єкти за допомогою malloc, якщо тривіальний конструктор за замовчуванням не виконує жодних дій?
У мене виникають труднощі в розумінні наступного абзацу, цитованого з cppreference about тривіального конструктора за замовчуванням. Я шукав stackoverflow, але все одно не отримав чіткої відповіді. Тож, будь ласка, допоможіть. Тривіальний конструктор за замовчуванням - це конструктор, який не виконує жодної дії. Усі типи даних, сумісні з мовою С (типи …

5
Як зробити згруповану чи парну складку пакета параметрів?
template<class Msg, class... Args> std::wstring descf(Msg, Args&&... args) { std::wostringstream woss; owss << Msg << ". " << ... << " " << args << ": '" << args << "' ";//not legal at all //or owss << Msg << ". " << args[0] << ": '" << args[1] << …

2
чи є автоматичними друзями конструктори копіювання та переміщення?
Ми можемо отримати доступ до приватних змінних іншого класу, коли визначаємо конструктори копіювання або переміщення. Чи робить їх C ++ friendавтоматично один для одного? Наприклад: my_str::my_str(my_str&& m) { size_ = m.size_; //accessing private variable another my_str class buff_ = m.buff_; //accessing private variable another my_str class m.buff_ = nullptr; m.size_ …
14 c++  friend-class 

3
Чому розмірність масиву є частиною його типу?
Читаючи книгу букваря C ++, я натрапив на це твердження: "Кількість елементів у масиві є частиною типу масиву". Тому я хотів дізнатися, використовуючи наступний код: #include<iostream> int main() { char Array1[]{'H', 'e', 'l', 'p'}; char Array2[]{'P', 'l', 'e', 'a', 's', 'e'}; std::cout<<typeid(Array1).name()<<std::endl; //prints A4_c std::cout<<typeid(Array2).name()<<std::endl; //prints A6_c return 0; } …
14 c++  arrays  c++11 

3
Чи потрібне повне кваліфіковане ім’я класу до загального масштабу для визначення позалінійних функцій членів?
Це питання змусило мене замислитись про те, чи завжди корисно / необхідно повністю кваліфікувати імена класів (включаючи глобального оператора області) у визначенні функції поза класу. З одного боку, я ніколи не бачив цього робити раніше (а синтаксис, як це правильно зробити, здається неясним). З іншого боку, пошук імен C ++ …

3
Чому "++ i ++" недійсний, тоді як (++ i) ++ є дійсним?
Розглянемо наступний код: int main() { int i = 2; int b = ++i++; return 3; } Він компілюється із наступним помилкою: <source>: In function 'int main()': <source>:3:16: error: lvalue required as increment operand 3 | int b = ++i++; | ^~ Це звучить для мене справедливо. Приріст постфікса має …

2
Чи дозволяється GCC9 уникати безцінного стану std :: variant?
Нещодавно я спостерігав за обговоренням Reddit, що призвело до хорошого порівняння std::visitоптимізації між компіляторами. Я помітив таке: https://godbolt.org/z/D2Q5ED І GCC9, і Clang9 (я думаю, вони поділяють один і той же stdlib) не генерують код для перевірки та викидання безцінного винятку, коли всі типи відповідають деяким умовам. Це призводить до кращого …

2
Який сенс дізнатися, чи є об’єкт інтегральним чи ні, чи є класовим типом чи ні?
Привіт, я бачив багато подібних прикладів на Cppreference.com: std::is_class<T> std::is_integral І так далі. Я знаю, якщо я запускаю код, наприклад, отримую trueабо false. Але який сенс у цьому? наприклад, знаючи об’єкт типу класу чи ні? #include <iostream> #include <type_traits> struct A {}; class B {}; enum class C {}; int …
14 c++  templates 

1
Чому std :: swap не працює на елементах вектор <bool> під Clang / Win?
У мене такий код: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } Аргументи про розумність vector&lt;bool&gt;убік, це справно працювало на: Кланг для Mac Visual Studio для Windows GCC для Linux Потім я спробував побудувати його з Clang у Windows і отримав таку помилку (скорочена): error: …

1
Чи може конструктор std :: vector range викликати явні перетворення?
Чи добре сформована наступна програма? #include &lt;vector&gt; struct A { explicit A(int) {} }; int main() { std::vector&lt;int&gt; vi = {1, 2, 3, 4, 5}; std::vector&lt;A&gt; va(vi.begin(), vi.end()); } Відповідно до C ++ 17 [послідовності.рекмтс], вимога до X u(i, j); де Xконтейнер послідовності, це: Tповинні бути EmplaceConstructibleв Xс *i. Однак …
14 c++  c++17 

3
Перевантажуйте лямбда-функцію
Як перевантажити просту функцію локальної лямбда? SSE вихідної проблеми: #include &lt;iostream&gt; #include &lt;map&gt; void read() { static std::string line; std::getline(std::cin, line); auto translate = [](int idx) { constexpr static int table[8]{ 7,6,5,4,3,2,1,0 }; return table[idx]; }; auto translate = [](char c) { std::map&lt;char, int&gt; table{ {'a', 0}, {'b', 1}, {'c', …

3
Функція шаблону не працює для функції вказівника на члена, яка приймає const ref
Нещодавно я написав функцію шаблону для вирішення деяких повторень коду. Це виглядає приблизно так: template&lt;class T, class R, class... Args&gt; R call_or_throw(const std::weak_ptr&lt;T&gt;&amp; ptr, const std::string&amp; error, R (T::*fun)(Args...), Args... args) { if (auto sp = ptr.lock()) { return std::invoke(fun, *sp, args...); } else { throw std::runtime_error(error.c_str()); } } int …
14 c++  templates 

3
std :: bit_cast з std :: масивом
У своїй нещодавній бесіді «Тип покарання в сучасному C ++» Тимур Домлер сказав, що std::bit_castйого неможливо використати для введення біт floatв «a», unsigned char[4]оскільки масиви стилю C не можуть бути повернуті з функції. Ми повинні або використовувати, std::memcpyабо чекати, поки C ++ 23 (або пізніше), коли щось подібне reinterpret_cast&lt;unsigned char*&gt;(&amp;f)[i]стане …

1
Як працює впровадження c ++ nullptr?
Мені цікаво знати, як nullptrпрацює. Стандарти N4659 і N4849 кажуть: він повинен мати тип std::nullptr_t; ви не можете прийняти його адресу; його можна безпосередньо перетворити на вказівник і вказівник на член; sizeof(std::nullptr_t) == sizeof(void*); його перетворення в boolє false; його значення може бути перетворене на інтегральний тип однаково (void*)0, але …

3
Копіювати ініціалізацію списку? Чому це компілюється?
Я використовую Microsoft Visual Studio Community 2019, V16.5.2. Я хочу перевірити ініціалізацію списку Перегляньте наступну програму тестування: #include &lt;string&gt; void foo(std::string str) {} int main() { foo( {"str1", "str2"} ); return 0; } Це компілюється без помилок та попереджень. Чому? Це дає помилку виконання: Expression: Transposed pointer range Може хтось, …
13 c++ 

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