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

C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который будет скомпилирован с помощью компилятора C ++). Используйте тег, зависящий от версии, для вопросов, связанных с конкретной редакцией стандарта [C ++ 11], [C ++ 14], [C ++ 17] или [C ++ 20] и т. Д.

2
GCC9 позволяет избежать бесполезного состояния std :: option?
Недавно я следил за обсуждением 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 …
14 c++  templates 

1
Может ли конструктор диапазона std :: vector вызывать явные преобразования?
Правильно ли сформирована следующая программа? #include <vector> struct A { explicit A(int) {} }; int main() { std::vector<int> vi = {1, 2, 3, 4, 5}; std::vector<A> va(vi.begin(), vi.end()); } Согласно C ++ 17 [sequence.reqmts], требование для X u(i, j); где Xконтейнер последовательности, это: Tдолжен быть EmplaceConstructibleв Xот *i. Однако в …
14 c++  c++17 

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 и получил …

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', 2}, …

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()); } } …
14 c++  templates 

3
std :: bit_cast с std :: array
В своем недавнем выступлении « Обработка типов в современном C ++» Тимур Думлер сказал, что std::bit_castего нельзя использовать для floatпреобразования битов в unsigned char[4]массив, потому что массивы в стиле C не могут быть возвращены из функции. Мы должны либо использовать, std::memcpyлибо подождать до C ++ 23 (или позже), когда что-то …

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 …
13 c++ 

1
std :: is_constructible возвращает несовместимое значение для частного конструктора
Каковы правила, по которым std::is_constructibleобрабатываются частные конструкторы? Учитывая следующий код: #include &lt;iostream&gt; class Class { private: Class() { } }; template &lt;typename T&gt; class Test { public: static void test() { std::cout //&lt;&lt; std::is_constructible&lt;Class&gt;::value &lt;&lt; std::is_constructible&lt;T&gt;::value &lt;&lt; std::endl; } }; int main() { Test&lt;Class&gt;::test(); } Это печатает 0( ideone ), …
13 c++  typetraits 

3
Выполнять функцию внутри шаблона функции только для тех типов, для которых определена функция
У меня есть шаблон функции, который принимает много разных типов в качестве входных данных. Из этих типов только один из них имеет getInt()функцию. Поэтому я хочу, чтобы код запускал функцию только для этого типа. Пожалуйста, предложите решение. Спасибо #include &lt;type_traits&gt; #include &lt;typeinfo&gt; class X { public: int getInt(){ return 9; …

1
Проблема компилятора C ++ со структурой в шаблонном классе
Следующий код не компилируется с gcc или clang. template&lt;class T&gt; class foo{}; template&lt;class T&gt; class template_class_with_struct { void my_method() { if(this-&gt;b.foo &lt; 1); }; struct bar { long foo; } b; }; Сообщение об ошибке error: type/value mismatch at argument 1 in template parameter list for 'template&lt;class T&gt; class foo' …

2
Как можно быстро вычислить const expr
Я пробовал константные выражения, которые оцениваются во время компиляции. Но я играл с примером, который кажется невероятно быстрым при исполнении во время компиляции. #include&lt;iostream&gt; constexpr long int fib(int n) { return (n &lt;= 1)? n : fib(n-1) + fib(n-2); } int main () { long int res = fib(45); std::cout …
13 c++  const  constexpr 

6
Как сравнить общие структуры в C ++?
Я хочу сравнить структуры в общем виде, и я сделал что-то вроде этого (я не могу поделиться фактическим источником, поэтому попросите более подробную информацию, если это необходимо): template&lt;typename Data&gt; bool structCmp(Data data1, Data data2) { void* dataStart1 = (std::uint8_t*)&amp;data1; void* dataStart2 = (std::uint8_t*)&amp;data2; return memcmp(dataStart1, dataStart2, sizeof(Data)) == 0; } …

4
Как достичь барьера StoreLoad в C ++ 11?
Я хочу написать переносимый код (Intel, ARM, PowerPC ...), который решает вариант классической задачи: Initially: X=Y=0 Thread A: X=1 if(!Y){ do something } Thread B: Y=1 if(!X){ do something } в которой цель состоит в том, чтобы избежать ситуации, в которой работают оба потокаsomething . (Хорошо, если ни одна из …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.