Pytania otagowane jako c++

C ++ jest językiem programowania ogólnego przeznaczenia. Został pierwotnie zaprojektowany jako rozszerzenie do C i ma podobną składnię, ale teraz jest to zupełnie inny język. Ten znacznik służy do pytań o kod (kompilowany) za pomocą kompilatora C ++. Użyj tagu specyficznego dla wersji w przypadku pytań związanych z określoną wersją standardową [C ++ 11], [C ++ 14], [C ++ 17] lub [C ++ 20] itp.

2
Czy operator std :: unordered_map [] wykonuje inicjalizację zera dla nieistniejącego klucza?
Według cppreference.com, std::map::operator[]dla nieistniejącej wartości robi zerową inicjalizację. Jednak ta sama strona nie wspomina o zerowej inicjalizacji std::unordered_map::operator[], z wyjątkiem tego, że opiera się na tym przykładzie. Oczywiście jest to tylko strona referencyjna, a nie standard. Czy poniższy kod jest w porządku, czy nie? #include <unordered_map> int main() { std::unordered_map<int, …

2
Wyznaczone inicjalizatory w C ++ 20
Mam pytanie dotyczące jednej z funkcji c ++ 20, wyznaczonych inicjatorów (więcej informacji o tej funkcji tutaj ) #include <iostream> constexpr unsigned DEFAULT_SALARY {10000}; struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { std::cout << std::boolalpha << std::is_aggregate_v<Person> …

3
Czy kompilator może stale składać zmienną lokalną?
Rozważ ten prosty kod: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Widać, że ani gccnie clangoptymalizuje potencjalnego połączenia z g. W moim rozumieniu jest to poprawne: maszyna abstrakcyjna ma zakładać, że volatilezmienne mogą się zmieniać w dowolnym momencie (z powodu np. Mapowania …

3
jaki jest przypadek użycia jawnego (bool)
C ++ 20 wprowadził jawne (bool), które warunkowo wybiera w czasie kompilacji, czy konstruktor jest jawny, czy nie. Poniżej znajduje się przykład, który znalazłem tutaj . struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template <typename T> explicit(!std::is_integral_v<T>) foo(T) {} }; foo a = 123; …
24 c++  c++20  explicit 

2
znaczenie inline w interfejsach modułów
Rozważ plik nagłówkowy: class T { private: int const ID; public: explicit T(int const ID_) noexcept : ID(ID_) {} int GetID() const noexcept { return ID; } }; lub alternatywnie: class T { private: int const ID; public: explicit T(int const ID_) noexcept; int GetID() const noexcept; }; inline T::T(int …

1
Dlaczego `decltype (static_cast <T> (…))` nie zawsze `T`?
W przypadku następującego kodu wszystkie twierdzenia oprócz ostatniego są przekazywane: template&lt;typename T&gt; constexpr void assert_static_cast_identity() { using T_cast = decltype(static_cast&lt;T&gt;(std::declval&lt;T&gt;())); static_assert(std::is_same_v&lt;T_cast, T&gt;); } int main() { assert_static_cast_identity&lt;int&gt;(); assert_static_cast_identity&lt;int&amp;&gt;(); assert_static_cast_identity&lt;int&amp;&amp;&gt;(); // assert_static_cast_identity&lt;int(int)&gt;(); // illegal cast assert_static_cast_identity&lt;int (&amp;)(int)&gt;(); assert_static_cast_identity&lt;int (&amp;&amp;)(int)&gt;(); // static assert fails } Dlaczego to ostatnie stwierdzenie zawodzi i static_cast&lt;T&gt;nie …
24 c++  static-cast 

3
C ++ 20 Pojęcia: Którą specjalizację szablonu wybiera się, gdy argument szablonu kwalifikuje się do wielu pojęć?
Dany : #include &lt;concepts&gt; #include &lt;iostream&gt; template&lt;class T&gt; struct wrapper; template&lt;std::signed_integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "signed_integral" &lt;&lt; std::endl; } }; template&lt;std::integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "integral" &lt;&lt; std::endl; } }; int main() { wrapper&lt;int&gt; …

1
Dlaczego rozmiar klasy w c ++ zależy od publicznego / prywatnego statusu członków danych?
Z tego co wiem, wielkość klasy w c ++ zależy od następujących czynników - Rozmiar wszystkich niestatycznych elementów danych. Kolejność członków danych. Jeśli uzupełnianie bajtów jest włączone, czy nie. Rozmiar jego bezpośredniej klasy bazowej. Istnienie funkcji wirtualnych. Tryb dziedziczenia (dziedziczenie wirtualne). Teraz utworzyłem 2 klasy, jak poniżej - class A{ …

2
Dlaczego ta funkcja szablonu nie działa zgodnie z oczekiwaniami?
Czytałem o funkcjach szablonów i ten problem mnie pomieszał: #include &lt;iostream&gt; void f(int) { std::cout &lt;&lt; "f(int)\n"; } template&lt;typename T&gt; void g(T val) { std::cout &lt;&lt; typeid(val).name() &lt;&lt; " "; f(val); } void f(double) { std::cout &lt;&lt; "f(double)\n"; } template void g&lt;double&gt;(double); int main() { f(1.0); // f(double) f(1); // …

3
Różnica w zachowaniu zmiennego wychwytywania funkcji lambda z odniesienia do zmiennej globalnej
Stwierdziłem, że wyniki są różne w różnych kompilatorach, jeśli użyję lambda do przechwycenia odwołania do zmiennej globalnej za pomocą słowa kluczowego podlegającego modyfikacji, a następnie zmodyfikowania wartości w funkcji lambda. #include &lt;stdio.h&gt; #include &lt;functional&gt; int n = 100; std::function&lt;int()&gt; f() { int &amp;m = n; return [m] () mutable -&gt; …


1
Zastosowanie zmiennej we własnym inicjatorze
[basic.scope.pdecl] / 1 standardowego projektu C ++ 20 zawierał następujący (nienormatywny) przykład w notatce (częściowy cytat sprzed scalenia żądania ściągnięcia 3580 , patrz odpowiedź na to pytanie): unsigned char x = x; [...] x jest inicjalizowany z własną (nieokreśloną) wartością. Czy to rzeczywiście ma dobrze zdefiniowane zachowanie w C ++ …

6
Inicjalizacja zmiennej nieznanego typu za pomocą przeciążonych konstruktorów w C ++
pochodzące głównie z pythonowego środowiska, z którym miałem problemy z pracą z typami w C ++. Próbuję zainicjować zmienną klasy za pomocą jednego z kilku przeciążonych konstruktorów, które przyjmują różne typy jako parametry. Przeczytałem, że użycie autosłowa kluczowego może być użyte do automatycznego zadeklarowania zmiennej, jednak w moim przypadku nie …

3
Czy separator shared_ptr jest przechowywany w pamięci przydzielonej przez niestandardowy program przydzielający?
Powiedzmy, że mam shared_ptrniestandardowy alokator i niestandardowy usuwacz. Nie mogę znaleźć w standardzie niczego, co mówi o tym, gdzie powinien być przechowywany usuwacz: nie mówi, że niestandardowy alokator zostanie użyty do pamięci usuwacza, i nie mówi, że nie będzie. Czy jest to nieokreślone, czy coś mi brakuje?


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.