C ++ 20 jest celem wersji C ++ po C ++ 17. Tego znacznika należy używać (wraz ze znacznikiem C ++) w pytaniach dotyczących funkcji C ++ na ścieżce dla C ++ 20.
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<unsigned char*>(&f)[i]zostanie …
Próbuję zrozumieć typy wyrażeń C ++, a im więcej czytam, tym bardziej byłem zdezorientowany, ponieważ uważam, że szkic C ++ jest bardzo trudny do strawienia, dlatego wolę inne zasoby, ale albo one są sobie sprzeczne, albo nie biorą pod uwagę, że brzmienie i definicja między wersjami C ++ mocno się …
Koncepcjaequality_comparable_with<T, U> ma zadeklarować, że obiekty typu Ti Umożna porównać sobie równe, a jeśli są, to ma oczekiwaną znaczenie. W porządku. Jednak ta koncepcja również musi common_reference_t<T&, U&>istnieć. Głównym impulsem common_referencei towarzyszącą mu funkcją wydaje się być umożliwienie iteratorom proxy , aby mieć miejsce do reprezentowania relacji między takimi iteratorami …
Aż do standardu C ++ 20 C ++, gdy chcieliśmy zdefiniować operatora spoza klasy, który korzysta z niektórych prywatnych członków klasy szablonu, używamy konstrukcji podobnej do tej: template <typename T> class Foo; template <typename T> constexpr bool operator==(T lhs, const Foo<T>& rhs); template <typename T> class Foo { public: constexpr …
Poszukuję sposobu na identyfikację pustych (niewychwyconych) lambd z innych lambd w funkcji szablonu. Obecnie używam C ++ 17, ale jestem również ciekawy odpowiedzi na C ++ 20. Mój kod wygląda następująco: template<typename T> auto func(T lambda) { // The aguments of the lambdas are unknown if constexpr (/* is captureless …
Jesteśmy w 2020 roku i nadchodzi C ++ 20 wraz z długo oczekiwaną funkcją modułów C ++. Ale po obejrzeniu kilku rozmów na temat CppCon stwierdzam, że moduły C ++ znajdują się w dziwnym miejscu, szczególnie dla menedżerów pakietów Linuksa (pacman, apt, emerge itp.) Z tego, czego się nauczyłem, są …
Skoro pojęcia są zdefiniowane jako predykaty czasu kompilacji, czy możliwe jest również ponowne wykorzystanie tych predykatów dla algorytmów kompilacji? Czy na przykład można sprawdzić, czy wszystkie typy w krotce są zgodne z koncepcją? O ile widziałem, nie można w żaden sposób przekazać koncepcji do funkcji, co prowadzi mnie z powrotem …
Poniższy kod kompiluje się dobrze z clang-trunk w trybie c ++ 17, ale psuje się w trybie c ++ 2a (nadchodzące c ++ 20): // Meta struct describing the result of a comparison struct Meta {}; struct Foo { Meta operator==(const Foo&) {return Meta{};} Meta operator!=(const Foo&) {return Meta{};} }; …
Wszystkie konstruktory std :: span są zadeklarowane jako constexpr, jednak nie wydaje się, aby którykolwiek z nich działał w kontekście constexpr. Odznaczenie któregokolwiek z poniższych constexpr spowoduje błąd kompilacji. #include <array> #include <span> int main() { constexpr int carray[3] = { 0, 1, 2 }; constexpr std::array<int, 3> array{ 0, …
Czy nie zostało std::spanzaprojektowane jako lekkie odniesienie do podregionów std::vector/ std::array/ plain array i podobnych? Czy nie powinien zawierać operatorów porównania w interfejsie API, aby był z nimi spójny? Jakie było uzasadnienie wyłączenia? Uwaga: przez operatorów porównania, to znaczy albo pełny zestaw ( <, <=...) lub statek kosmiczny<=>
W standardzie C ++ 20 mówi się, że typy tablic są domyślnymi typami życia . Czy to oznacza, że tablica dla niejawnego typu życia może być niejawnie utworzona? Domniemane utworzenie takiej tablicy nie spowodowałoby utworzenia elementów tablicy? Rozważ ten przypadek: //implicit creation of an array of std::string //but not the …
Do C ++ zbliżają się nowe wersje ze standardową wersją C ++ 20. Moje pytanie: Czy będziemy w stanie zbudować (istniejące) kontenery biblioteki standardowej o dowolnym zakresie? A co ważniejsze, z widokami zasięgu? Na przykład czy to: #include <vector> #include <iostream> #include <ranges> int main() { auto sq = [](int …
W poniższym przykładzie argumenty funkcji są używane do testowania wymaganym wyrażeniem, czy wyrażenie, które ich używa, jest poprawnie utworzone. Wymagane wyrażenie nie przyjmuje żadnych argumentów; wykorzystuje bezpośrednio zmienne w zakresie funkcji: #include <cstddef> #include <vector> template<typename T> void Resize(T &v, std::size_t const n) { if constexpr (requires { v.resize(n); }) …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.