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.

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 …

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


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 ++ …



2
Dlaczego koncepcja same_as sprawdza dwukrotnie równość typu?
Patrząc na możliwą implementację koncepcji same_as na https://en.cppreference.com/w/cpp/concepts/same_as zauważyłem, że dzieje się coś dziwnego. 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>; Pierwsze pytanie brzmi: dlaczego SameHelperkoncepcja jest potrzebna? …
19 c++  c++20  concept 

4
Ciągłe wyliczanie C ++ 11
Czy istnieje sposób sprawdzenia w C ++ 11, czy wyliczenie jest ciągłe ? W pełni uzasadnione jest podawanie wartości wyliczeniowych, które nie są. Czy w C ++ 14, C ++ 17 jest jakaś cecha typu, a może C ++ 20, aby sprawdzić, czy wyliczanie jest ciągłe? Należy tego użyć w …
17 c++  c++11  c++14  c++17  c++20 

1
Dlaczego standard C ++ obsługuje wyszukiwanie plików w taki sposób?
C ++ używa tego streamofftypu do reprezentowania przesunięcia w strumieniu (pliku) i jest zdefiniowany w następujący sposób w [stream.types]: using streamoff = implementation-defined ; Typ streamoff jest synonimem jednego z podpisanych podstawowych integralnych typów o wystarczającym rozmiarze, aby reprezentować maksymalny możliwy rozmiar pliku dla systemu operacyjnego. 287) 287) Zazwyczaj długi. …



1
Dlaczego funkcja konstelacyjna pozwala na niezdefiniowane zachowanie?
W C ++ istnieje bardzo zgrabna właściwość wyrażeń stałych: ich ocena nie może mieć niezdefiniowanego zachowania ( 7.7.4.7 ): Wyrażenie e jest podstawowym stałym wyrażeniem, chyba że ocena e, zgodnie z regułami maszyny abstrakcyjnej ([intro. Wykonanie]), ocenia jedną z następujących czynności: ... operacja, która miałaby niezdefiniowane zachowanie określone w [intro] …

2
Dlaczego std :: swap nie jest oznaczony constexpr przed C ++ 20?
W C ++ 20 std::swapstaje się constexprfunkcją. Wiem, że standardowa biblioteka naprawdę pozostawała w tyle za językiem w oznaczaniu rzeczy constexpr, ale do 2017 r. <algorithm>Była prawie niezrozumiała, podobnie jak wiele innych rzeczy. A jednak - std::swapnie było. Niejasno pamiętam jakąś dziwną wadę językową, która uniemożliwia to oznakowanie, ale zapominam …

2
Czy pamięć std :: chrono :: years naprawdę ma co najmniej 17 bitów?
Z preferencji std::chrono::years (since C++20) duration</*signed integer type of at least 17 bits*/, std::ratio<31556952>> Używając libc++, wydaje się, że podkreśleniem std::chrono::yearsjest shortto, że podpisano 16 bitów . std::chrono::years( 30797 ) // yields 32767/01/01 std::chrono::years( 30797 ) + 365d // yields -32768/01/01 apparently UB Czy istnieje literówka na preferencjach lub coś …
14 c++  chrono  c++20  libc++ 

1
if constexpr - dlaczego odrzucona instrukcja jest w pełni sprawdzana?
W GCC 10 bawiłem się konstelacją c ++ 20 i napisałem ten kod #include <optional> #include <tuple> #include <iostream> template <std::size_t N, typename Predicate, typename Tuple> consteval std::optional<std::size_t> find_if_impl(Predicate&& pred, Tuple&& t) noexcept { constexpr std::size_t I = std::tuple_size_v<std::decay_t<decltype(t)>> - N; if constexpr (N == 0u) { return std::nullopt; } …

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.