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

14
Почему std :: swap не работает с векторными элементами <bool> в Clang / Win?

У меня есть такой код: #include <vector> #include <utility> int main() { std::vector<bool> vb{true, false}; std::swap(vb[0], vb[1]); } Аргументы о здравомыслии в vector<bool>стороне, это работало очень хорошо на: Лязг для Mac Visual Studio для Windows GCC для Linux Затем я...

14
Перегрузка лямбда-функции

Как перегрузить простую локальную лямбда-функцию? SSE оригинальной задачи: #include <iostream> #include <map> 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...

14
Какой смысл знать, является ли объект целым или нет, или это тип класса или нет?

Здравствуйте, я видел много таких примеров на Cppreference.com: std::is_class<T> std::is_integral И так далее. Я знаю, если я запускаю код, например, я получаю trueили false. Но какой в ​​этом смысл? Например, зная, что объект имеет тип класса или нет? #include <iostream> #include...

14
GCC9 позволяет избежать бесполезного состояния std :: option?

Недавно я следил за обсуждением Reddit, которое привело к хорошему сравнению std::visitоптимизации по компиляторам. Я заметил следующее: https://godbolt.org/z/D2Q5ED И GCC9, и Clang9 (я полагаю, они используют один и тот же stdlib) не генерируют код для проверки и создания бесполезного исключения,...

14
Почему «++ 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++; | ^~ Это звучит справедливо для меня. Приращение...

14
Требуется ли когда-либо полностью определенное имя класса до глобальной области видимости для внешних определений функций-членов?

Этот вопрос заставил меня задуматься о том, когда-либо полезно / необходимо полностью квалифицировать имена классов (включая оператор глобальной области видимости) в определении функции-члена вне класса. С одной стороны, я никогда не видел, чтобы это было сделано раньше (и синтаксис для правильной...

14
Почему размерность массива является частью его типа?

Читая книгу по C ++ Primer, я натолкнулся на следующее утверждение: «Количество элементов в массиве является частью типа массива». Поэтому я хотел узнать, используя следующий код: #include<iostream> int main() { char Array1[]{'H', 'e', 'l', 'p'}; char Array2[]{'P', 'l', 'e', 'a', 's', 'e'};...

14
копировать и перемещать конструкторы автоматически друзья?

Мы можем получить доступ к закрытым переменным другого класса, когда определяем конструкторы копирования или перемещения. С ++ делает их friendдруг другу автоматически? Например: my_str::my_str(my_str&& m) { size_ = m.size_; //accessing private variable another my_str class buff_ = m.buff_;...

14
Почему мы не можем создавать тривиально конструируемые объекты, используя malloc, если тривиальный конструктор по умолчанию не выполняет никаких действий?

Мне трудно понять следующий абзац, цитируемый из cppreference о тривиальном конструкторе по умолчанию. Я искал stackoverflow, но все еще не получил четкого ответа. Поэтому, пожалуйста, помогите. Тривиальный конструктор по умолчанию - это конструктор, который не выполняет никаких действий. Все типы...

14
Это ошибка в 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...

14
Является ли разница между двумя экземплярами constexpr указателей __func__ все еще constexpr?

Это действительный C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC и MSVC считают, что все в порядке, Clang считает, что это не так: Compiler Explorer . Все компиляторы соглашаются, что с этим все в порядке: Compiler Explorer . int main() { constexpr auto p = __func__;...

14
Почему стековая память выделяется, когда она не используется?

Рассмотрим следующий пример: struct vector { int size() const; bool empty() const; }; bool vector::empty() const { return size() == 0; } Сгенерированный код сборки для vector::empty(по clang, с оптимизацией): push rax call vector::size() const test eax, eax sete al pop rcx ret Почему он выделяет...

14
Почему оптимизация пустой базы запрещена, если пустой базовый класс также является переменной-членом?

Оптимизация пустой базы - это здорово. Тем не менее, он имеет следующие ограничения: Оптимизация пустой базы запрещена, если один из пустых базовых классов также является типом или базой типа первого не статического члена данных, поскольку два базовых подобъекта одного типа должны иметь разные...

14
Можно ли инициализировать список std :: vector с идеальной пересылкой элементов?

Я заметил , что совокупный список инициализационных ЗПП :: вектор выполняет копирование инициализации , когда движение более применимо. В то же время, несколько emplace_backs делают то, что я хочу. Я мог только придумать это несовершенное решение написания шаблонной функции init_emplace_vector....

14
Почему GCC не может предположить, что std :: vector :: size не изменится в этом цикле?

Я обратился к коллеге, который 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>&...

14
Как вектор как ключ работает внутри C ++?

Этот SO-ответ говорит, что STL Map с вектором для ключа вектора может использоваться в качестве ключа. Поэтому, когда мы используем вектор в качестве ключа. Как это на самом деле работает, так как ключ должен быть уникальным, поэтому, когда мы вставляем другой вектор с такими же элементами,...