Pytania otagowane jako c++20

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.

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<unsigned char*>(&f)[i]zostanie …


1
Czy `equality_comparable_with` wymaga wymagania` common_reference`?
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 …

1
C ++ 20 definicja poza klasą w klasie szablonów
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 …
12 c++  templates  c++20 

1
Czy zgodnie z normą gwarantowana lambda bez wychwytywania jest pusta?
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 …
12 c++  lambda  c++17  c++20 



2
Przekazywanie koncepcji do funkcji
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 …


4
Przerwanie zmiany w C ++ 20 czy regresja w clang-trunk / gcc-trunk podczas przeciążania porównania równości z wartością logiczną inną niż logiczna?
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{};} }; …

1
Czy rozpiętość może być constexpr?
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, …
11 c++  constexpr  c++20 

1
Dlaczego w standardzie std :: span brakuje operatorów porównania?
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<=>
10 c++  std  c++20  std-span 


1
Czy będziemy w stanie konstruować kontenery z widokami w C ++ 20?
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 …
10 c++  c++20  range-v3 

1
Czy dozwolone wyrażenia mogą „wychwytywać” zmienne obejmującego zakres?
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); }) …

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.