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.

3
Czy w przypadku definicji funkcji członka poza linią wymagana jest w pełni kwalifikowana nazwa klasy do zasięgu globalnego?
To pytanie sprawiło, że zastanawiałem się, czy kiedykolwiek przydatne / konieczne jest pełne kwalifikowanie nazw klas (w tym operatora zasięgu globalnego) w definicji funkcji członka poza klasą. Z jednej strony nigdy wcześniej tego nie widziałem (a składnia, aby to zrobić, wydaje się niejasna). Z drugiej strony wyszukiwanie nazw w C …


2
Po co wiedzieć, czy obiekt jest całką, czy nie, czy jest typem klasy, czy nie?
Witaj Widziałem wiele takich przykładów w Cppreference.com: std::is_class<T> std::is_integral I tak dalej. Wiem, że jeśli uruchomię kod, na przykład otrzymuję truelub false. Ale jaki jest w tym sens? np. wiedząc, że obiekt jest typu klasy czy nie? #include <iostream> #include <type_traits> struct A {}; class B {}; enum class C …
14 c++  templates 

1
Czy konstruktor zakresu std :: vector może wywoływać jawne konwersje?
Czy następujący program jest dobrze sformułowany? #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()); } Zgodnie z C ++ 17 [sekwencja.reqmts] wymóg dotyczący X u(i, j); gdzie Xjest kontenerem sekwencji, jest: Tbędzie EmplaceConstructibledo Xz *i. …
14 c++  c++17 

3
Przeciąż funkcję lambda
Jak przeciążyć prostą lokalną funkcję lambda? SSE oryginalnego problemu: #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 translate = [](char c) { std::map<char, int> table{ {'a', 0}, {'b', 1}, {'c', …

1
Dlaczego std :: swap nie działa na elementach wektora <bool> w Clang / Win?
Mam taki kod: #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;Pomijając argumenty na temat rozsądku , działało to dobrze: Clang dla komputerów Mac Visual Studio dla Windows GCC dla systemu Linux Następnie próbowałem zbudować go za pomocą Clanga w systemie Windows i otrzymałem następujący …

3
Funkcja szablonu nie działa w przypadku pobierania wskaźnika od funkcji do elementu składowego
Ostatnio napisałem funkcję szablonu, aby rozwiązać niektóre powtórzenia kodu. To wygląda tak: 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()); } } int main() { …
14 c++  templates 

3
std :: bit_cast z std :: array
W swoim ostatnim przemówieniu „Pisanie czcionek we współczesnym C ++” Timur Doumler powiedział, że std::bit_castnie można go użyć do wrzucenia a floatdo, unsigned char[4]ponieważ tablice w stylu C nie mogą zostać zwrócone z funkcji. Powinniśmy albo użyć, std::memcpyalbo poczekać, aż C ++ 23 (lub nowszy), kiedy coś takiego reinterpret_cast&lt;unsigned char*&gt;(&amp;f)[i]zostanie …

1
Jak działa implementacja cull ntrptr?
Jestem ciekawy, jak nullptrdziała. Normy N4659 i N4849 mówią: musi mieć typ std::nullptr_t; nie możesz wziąć jego adresu; można go bezpośrednio przekonwertować na wskaźnik, a wskaźnik na element członkowski; sizeof(std::nullptr_t) == sizeof(void*); jego konwersja na booljest false; jego wartość można przekonwertować na typ całkowy identycznie (void*)0, ale nie wstecz; Jest …

3
Skopiować inicjalizację listy? Dlaczego to się kompiluje?
Korzystam z Microsoft Visual Studio Community 2019, V16.5.2. Chcę przetestować inicjalizację listy Zobacz następujący program testowy: #include &lt;string&gt; void foo(std::string str) {} int main() { foo( {"str1", "str2"} ); return 0; } Kompiluje się bez błędów i ostrzeżeń. Dlaczego? Daje błąd środowiska wykonawczego: Expression: Transposed pointer range Czy ktoś może …
13 c++ 

1
std :: is_constructible zwraca niespójną wartość dla prywatnego konstruktora
Jakie są reguły, według których std::is_constructibleobsługuje się konstruktorów prywatnych? Biorąc pod uwagę następujący kod: #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(); } To …
13 c++  typetraits 


3
Wykonaj funkcję w szablonie funkcji tylko dla tych typów, dla których zdefiniowano funkcję
Mam szablon funkcji, który pobiera wiele różnych typów podczas wprowadzania. Spośród tych typów tylko jeden z nich ma getInt()funkcję. Dlatego chcę, aby kod uruchamiał funkcję tylko dla tego typu. Proszę zaproponować rozwiązanie. Dzięki #include &lt;type_traits&gt; #include &lt;typeinfo&gt; class X { public: int getInt(){ return 9; } }; class Y{ }; …

2
Jak można tak szybko ocenić const expr
Próbowałem wyrażeń stałych, które są oceniane podczas kompilacji. Ale bawiłem się przykładem, który wydaje się niewiarygodnie szybki, gdy jest wykonywany w czasie kompilacji. #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
Jak porównać ogólne struktury w C ++?
Chcę porównać struktury w ogólny sposób i zrobiłem coś takiego (nie mogę udostępnić faktycznego źródła, więc w razie potrzeby poproś o więcej szczegółów): 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; } Działa to głównie zgodnie …

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.