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

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

3
Является ли значение указателя `this` постоянным в течение всего времени существования объекта?
thisГарантируется ли значение указателя постоянным в течение жизни определенного объекта? Я не могу представить себе случай, когда это изменится, но не знаю, не пропустил ли я что-то.


1
Почему конструктор std :: atomic ведет себя по-разному в C ++ 14 и C ++ 17
Я работаю в проекте с C ++ 11, и я попробовал следующий код #include <atomic> struct A { std::atomic_int idx = 1; }; int main() { return 0; } Я получаю ошибку компилятора error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]' std::atomic_int idx = 1; ^ Тот …
19 c++  c++14  c++17  stdatomic 

2
Почему концепция same_as дважды проверяет равенство типов?
Глядя на возможную реализацию концепции same_as на https://en.cppreference.com/w/cpp/concepts/same_as, я заметил, что происходит нечто странное. namespace detail { template< class T, class U > concept SameHelper = std::is_same_v<T, U>; } template< class T, class U > concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>; Первый вопрос: почему SameHelperпонятие вложено? Второе - …
19 c++  c++20  concept 


5
Как разрешить висячий const ref
Следующая короткая программа #include <vector> #include <iostream> std::vector<int> someNums() { return {3, 5, 7, 11}; } class Woop { public: Woop(const std::vector<int>& nums) : numbers(nums) {} void report() { for (int i : numbers) std::cout << i << ' '; std::cout << '\n'; } private: const std::vector<int>& numbers; }; int …
18 c++ 

3
Значения лямбда-замыкания могут быть переданы как ссылочные параметры rvalue.
Я обнаружил, что lvalueлямбда-замыкания всегда можно передать в качестве rvalueпараметров функции. Смотрите следующую простую демонстрацию. #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a `lvalue` …

1
Оператор new () ведет себя по-разному, когда оператор delete () удаляется в зависимости от существования конструктора по умолчанию
Создание нового объекта класса C с оператором new () выдает здесь ошибку: class C { public: C() {} virtual ~C() {} void operator delete(void*) = delete; }; int main() { C* c = new C; } с C2280: 'void C::operator delete(void *)': function was explicitly deleted Но когда я заменяю …

4
Непрерывное перечисление C ++ 11
Есть ли способ проверить в C ++ 11, является ли перечисление непрерывным ? Полностью допустимо указывать значения enum, которых нет. Есть ли такая особенность, как черта типа в C ++ 14, C ++ 17 или, может быть, C ++ 20, чтобы проверить, является ли enum непрерывным? Это будет использоваться в …
17 c++  c++11  c++14  c++17  c++20 

2
Прыжки через переменную инициализации плохо сформированы или это вызывает неопределенное поведение?
Рассмотрим этот код: void foo() { goto bar; int x = 0; bar: ; } GCC и Clang отклоняют это , потому что переход к bar:обходу инициализации переменной. MSVC вообще не жалуется (кроме случаев, xкогда bar:вызывает предупреждение). Мы можем сделать аналогичную вещь с switch: void foo() { switch (0) { …

1
Почему стандарт C ++ обрабатывает файл в поисках так, как он это делает?
C ++ использует streamoffтип для представления смещения внутри (файлового) потока и определяется следующим образом в [stream.types]: using streamoff = implementation-defined ; Тип streamoff является синонимом одного из подписанных базовых целочисленных типов достаточного размера, чтобы представить максимально возможный размер файла для операционной системы. 287) 287) Обычно длинные длинные. Это имеет смысл, …


2
Это старый конструктор в стиле C ++?
Здесь кусок кода C ++. В этом примере многие блоки кода выглядят как вызовы конструктора. К сожалению, блочного кода № 3 нет (это можно проверить с помощью https://godbolt.org/z/q3rsxn и https://cppinsights.io ). Я думаю, что это старая нотация C ++, и она может объяснить введение новой нотации конструкции C ++ 11 …
17 c++  c++11 

4
Почему std :: function не участвует в разрешении перегрузки?
Я знаю, что следующий код не скомпилируется. void baz(int i) { } void baz() { } class Bar { std::function<void()> bazFn; public: Bar(std::function<void()> fun = baz) : bazFn(fun){} }; int main(int argc, char **argv) { Bar b; return 0; } Потому std::functionчто сказано не учитывать разрешение перегрузки, как я читал …

1
Правильно ли Clang отклонять код, в котором вложенный класс шаблона класса определяется только через специализации?
Дан следующий шаблон класса: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; мы определяем Innerотдельно для каждой специализации Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; а затем определить функцию-член fодин раз для всех специализаций Outer: auto Outer<T>::f(Inner) -> void { } но Кланг (9.0.0) …

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