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

33
Столкновение пространства имен C ++ в конструкторе копирования

У меня есть следующий код: namespace A { struct Foo { int a; }; } struct Foo { int b; }; struct Bar : public A::Foo { Bar(Foo foo) { c = foo.b; } int c; }; Компиляторы C ++ жалуются на «c = foo.b», потому что A :: Foo не имеет члена с именем b. Если я изменяю тип параметра Bar с помощью :: Foo, он...

33
Это законно, чтобы new-allocate указатель на функцию?

Указатели на функции не являются обычными указателями данных, поскольку они не могут быть сохранены в указателе void *. Тем не менее, кажется, что я могу сохранить копию указателя функции в динамической памяти (в gcc и clang), как в коде ниже. Является ли такой код законным в соответствии со...

32
Почему два предложения с использованием одного и того же типа рассматриваются как неоднозначные в gcc

У меня есть два базовых класса с использованием предложений class MultiCmdQueueCallback { using NetworkPacket = Networking::NetworkPacket; .... } class PlcMsgFactoryImplCallback { using NetworkPacket = Networking::NetworkPacket; .... } Затем я объявляю класс class PlcNetwork : public...

32
C ++ decltype и круглые скобки - почему?

Тема обсуждалась раньше , но это не дубликат. Когда кто-то спрашивает о разнице между decltype(a)и decltype((a)), обычный ответ - aэто переменная, (a)это выражение. Я считаю этот ответ неудовлетворительным. Во-первых, aэто также выражение. Варианты основного выражения включают, среди прочего:...

31
Странное поведение с полями классов при добавлении в std :: vector

Я обнаружил очень странное поведение (на Clang и GCC) в следующей ситуации. У меня есть вектор, nodesс одним элементом, экземпляр класса Node. Затем я вызываю функцию, nodes[0]которая добавляет новый Nodeвектор. При добавлении нового узла поля вызывающего объекта сбрасываются! Однако они, похоже,...

31
Может ли отсутствующий #include нарушить работу программы во время выполнения?

Есть ли какой-нибудь случай, когда пропадание #includeможет сломать программное обеспечение во время выполнения, в то время как сборка все еще проходит? Другими словами, возможно ли, что #include "some/code.h" complexLogic(); cleverAlgorithms(); а также complexLogic(); cleverAlgorithms(); будут ли...

30
Как называется (…) в C и C ++?

Одним из применений ...является обозначение переменных элементов в C и C ++. Как это называется? Это классифицируется как оператор или что-то еще, когда используется таким образом? Любые другие детали, касающиеся ...? Изменить: я знаю цель .... Я спрашиваю о его названии и классификации, которые, я...

29
Почему `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 Почему бы не...

29
Копирование структур с неинициализированными членами

Допустимо ли копировать структуру, некоторые члены которой не инициализированы? Я подозреваю, что это неопределенное поведение, но если это так, то оставлять неинициализированные члены в структуре (даже если эти члены никогда не используются напрямую) довольно опасно. Поэтому мне интересно, есть ли...

28
Почему в C ++ отличается static_cast <unsigned> от отрицательных чисел, если число постоянное или нет

Какие правила С ++ означают, что равно равно ложно ? Данный: float f {-1.0}; bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0)); Например, https://godbolt.org/z/fcmx2P #include <iostream> int main() { float f {-1.0}; const float cf {-1.0}; std::cout <<...

28
Класс не может получить доступ к своему собственному статическому методу 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) {...

28
Счетчики времени компиляции C ++, вновь

TL; DR Прежде чем пытаться прочитать весь этот пост, знайте, что: решение поставленной проблемы было найдено мной , но я все еще хочу знать, является ли анализ правильным; Я упаковал решение в fameta::counterкласс, который решает несколько оставшихся уловок. Вы можете найти это на github ; Вы...

28
Почему std :: hash не гарантированно является детерминированным?

Далее мы используем N4140 (C ++ 14 Standard). В соответствии с § 17.6.3.4 Хеш-требованиями , Возвращаемое значение должно зависеть только от аргумента k для продолжительности программы . [Примечание: Таким образом, все вычисления выражения h(k)с одинаковым значением kдают один и тот же результат...

27
Почему групповое суммирование медленнее с отсортированными группами, чем с несортированными группами?

У меня есть 2 столбца целых чисел с разделителями табуляции, первый из которых является случайным целым числом, второй - целым числом, идентифицирующим группу, которая может быть сгенерирована этой программой. ( generate_groups.cc) #include <cstdlib> #include <iostream> #include...

27
Когда «this» захвачено лямбдой, нужно ли его использовать явно?

Примеры, которые я обнаружил, что захват thisв лямбде использует это явно; например: capturecomplete = [this](){this->calstage1done();}; Но кажется, что это также возможно использовать неявно; например: capturecomplete = [this](){calstage1done();}; Я проверил это в g ++, и это скомпилировано....

27
Почему выбрана эта перегрузка оператора преобразования?

Рассмотрим следующий код . struct any { template <typename T> operator T &&() const; template <typename T> operator T &() const; }; int main() { int a = any{}; } Здесь второй оператор преобразования выбирается разрешением перегрузки. Почему? Насколько я понимаю, два...

26
Является ли void * function () указателем на функцию или функцию, возвращающую void *?

Я запутался в значении void *function(). Это указатель на функцию или возвращаемую функцию void*? Я всегда использовал его в структурах данных как рекурсивную функцию, возвращающую указатель, но когда я увидел код в многопоточности ( pthread), было одно и то же объявление функции. Теперь я...

26
Можно ли вернуть значение аргумента по умолчанию с помощью константной ссылки?

Можно ли вернуть значение аргумента по умолчанию с помощью константной ссылки, как в следующих примерах: https://coliru.stacked-crooked.com/a/ff76e060a007723b #include <string> const std::string& foo(const std::string& s = std::string("")) { return s; } int main() { const...