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

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

4
Як називається (...) в C і C ++?
Одним із напрямків використання ...є позначення різноманітних сутностей у C та C ++. Як його звати? Чи класифікується це як оператор чи щось інше, коли використовується таким чином? Будь-які інші деталі стосовно ...? Редагувати: Я знаю мету .... Я запитую про його назву та класифікацію, яка, сподіваюся, схожа як на …

6
Чи безпечно поміняти два різні вектори на C ++, використовуючи метод swap std :: vector ::?
Припустимо, у вас є такий код: #include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> First{"example", "second" , "C++" , "Hello world" }; std::vector<std::string> Second{"Hello"}; First.swap(Second); for(auto a : Second) std::cout << a << "\n"; return 0; } Уявіть, що вектором це ще немає std::string, але класи: std::vector<Widget> WidgetVector; …
30 c++  c++11  vector  stdvector  swap 

4
Копіювання конструкцій з неініціалізованими членами
Чи дійсно копіювати структуру, частина членів якої не ініціалізована? Я підозрюю, що це не визначена поведінка, але якщо так, то це робить залишати будь-яких неініціалізованих членів структури (навіть якщо ці члени ніколи не використовуються безпосередньо) досить небезпечно. Тож мені цікаво, чи є щось у стандарті, що це дозволяє. Наприклад, чи …

2
Чому `std :: string :: find ()` не повертає кінцевий ітератор під час відмов?
Я вважаю, що поведінка std::string::findсуперечить стандартним контейнерам C ++. Напр std::map<int, int> myMap = {{1, 2}}; auto it = myMap.find(10); // it == myMap.end() Але для струни, std::string myStr = "hello"; auto it = myStr.find('!'); // it == std::string::npos Чому замість цього не слід myStr.find('!')повернутись ?myStr.end()std::string::npos Оскільки std::stringдещо особливе порівняно …

2
Чому std :: hash не гарантовано буде детермінованим?
Згодом ми використовуємо N4140 (стандарт C ++ 14). Відповідно до § 17.6.3.4 Вимоги до хешу , Повернене значення залежить лише від аргументу k протягом тривалості програми . [Примітка. Таким чином, всі оцінки виразу h(k)з однаковим значенням kдають однаковий результат для заданого виконання програми . - кінцева примітка] і § 20.9.12 …

1
C ++ скласти лічильники часу, переглянутий
TL; DR Перш ніж спробувати прочитати весь цей пост, знайте, що: рішення представленого питання я знайшов сам , але я все ще нетерплячий знати, чи правильний аналіз; Я розфасував це рішення в fameta::counterклас, який вирішує кілька залишків. Ви можете знайти його на github ; ви можете побачити це на роботі …

1
Клас не може отримати доступ до свого приватного статичного методу constexpr - помилка Clang?
Цей код не компілюється в Clang (6,7,8,9, магістраль), але просто добре поєднується в GCC (7.1, 8.1, 9.1): template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; } else …

1
Чому в C ++ різняться static_cast <без підписання> від'ємних чисел, якщо число постійне чи ні
Що за правила C ++, що означає рівне , помилково ?. Подано: float f {-1.0}; bool equal = (static_cast&lt;unsigned&gt;(f) == static_cast&lt;unsigned&gt;(-1.0)); Наприклад, https://godbolt.org/z/fcmx2P #include &lt;iostream&gt; int main() { float f {-1.0}; const float cf {-1.0}; std::cout &lt;&lt; std::hex; std::cout &lt;&lt; " f" &lt;&lt; "=" &lt;&lt; static_cast&lt;unsigned&gt;(f) &lt;&lt; '\n'; std::cout &lt;&lt; …
28 c++  casting 

2
Чому мій клас не може бути сконструйований за замовчуванням?
У мене є такі заняття: #include &lt;type_traits&gt; template &lt;typename T&gt; class A { public: static_assert(std::is_default_constructible_v&lt;T&gt;); }; struct B { struct C { int i = 0; }; A&lt;C&gt; a_m; }; int main() { A&lt;B::C&gt; a; } Під час компіляції a_mне може бути сконструйовано за замовчуванням, але aє. При зміні Cна: …
28 c++ 

2
Коли "це" фіксується лямбда, чи потрібно це явно використовувати?
Я знайшов приклади, що вловлюють thisу лямбді явно, використовують це; наприклад: capturecomplete = [this](){this-&gt;calstage1done();}; Але, мабуть, це також можна використовувати неявно; наприклад: capturecomplete = [this](){calstage1done();}; Я перевірив це в g ++, і він склав. Це стандарт C ++? (і якщо так, то яка версія) чи це якась форма розширення?

3
Чому обрано таке перевантаження оператора перетворення?
Розглянемо наступний код . struct any { template &lt;typename T&gt; operator T &amp;&amp;() const; template &lt;typename T&gt; operator T &amp;() const; }; int main() { int a = any{}; } Тут другий оператор перетворення вибирається за роздільною здатністю перевантаження. Чому? Наскільки я розумію, два оператори виводяться на operator int &amp;&amp;() …

2
Чому групується підсумовування повільніше з відсортованими групами, ніж несортовані групи?
У мене є два стовпчики з цілими цілими числами, перша з яких є випадковим цілим числом, друга - цілим числом, що ідентифікує групу, яка може бути згенерована цією програмою. ( generate_groups.cc) #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; int main(int argc, char* argv[]) { int num_values = atoi(argv[1]); int num_groups = …
27 c++  performance 

3
Як я можу запобігти відгадуванню C ++ другого аргументу шаблону?
Я використовую бібліотеку C ++ ( strf ), яка десь у ній має такий код: namespace strf { template &lt;typename ForwardIt&gt; inline auto range(ForwardIt begin, ForwardIt end) { /* ... */ } template &lt;typename Range, typename CharT&gt; inline auto range(const Range&amp; range, const CharT* sep) { /* ... */ } …

2
Список ініціалізаторів всередині std :: pair
Цей код: #include &lt;iostream&gt; #include &lt;string&gt; std::pair&lt;std::initializer_list&lt;std::string&gt;, int&gt; groups{ { "A", "B" }, 0 }; int main() { for (const auto&amp; i : groups.first) { std::cout &lt;&lt; i &lt;&lt; '\n'; } return 0; } компілює, але повертає segfault. Чому? Тестується на gcc 8.3.0 та на онлайн-компіляторах.
26 c++  std  std-pair 

3
Чи нормально повернути значення аргументу за замовчуванням за допомогою посилання const?
Чи нормально повернути значення аргументу за замовчуванням за посиланням const, як у наведених нижче прикладах: https://coliru.stacked-crooked.com/a/ff76e060a007723b #include &lt;string&gt; const std::string&amp; foo(const std::string&amp; s = std::string("")) { return s; } int main() { const std::string&amp; s1 = foo(); std::string s2 = foo(); const std::string&amp; s3 = foo("s"); std::string s4 = foo("s"); …

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