Czy specyfikacja C ++ określa kolejność operator newi konstruktor Aw new C(A()). G ++ niech kolejność będzie A()-> new-> C(), ale clang ++ niech będzie new-> A()-> C(). Czy różnica jest spowodowana nieokreślonym zachowaniem? g ++: 7.4.0 clang ++: 10.0.0 #include <iostream> #include <cstdlib> struct A { A() { std::cout …
Próbuję zrozumieć następujące fragmenty kodu Fragment nr 1 template <typename T> struct A { static constexpr int VB = T::VD; }; struct B : A<B> { }; Ani gcc9, ani clang9 nie generują tutaj błędu. P: Dlaczego ten kod się kompiluje? Czy nie A<B>dziedziczymy podczas dziedziczenia po B? W B …
Wyrażenie „zdecydowanie zdarza się wcześniej” jest używane kilkakrotnie w standardowym projekcie C ++. Na przykład: Zakończenie [basic.start.term] / 5 Jeśli zakończenie inicjalizacji obiektu o czasie przechowywania statycznym nastąpi zdecydowanie przed wywołaniem std :: atexit (patrz [support.start.term]), wywołanie funkcji przekazane do std :: atexit jest sekwencjonowany przed wywołaniem obiektu destruktora dla …
Rozważ następujący program: #include<stdexcept> #include<iostream> int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&) { std::cout << "Caught!\n"; } } GCC i Clang z wywołaniem libstdc ++ std::terminatei przerywają program z komunikatem terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid Clang z libc ++ …
To pytanie wynika z tego komentarza: Lambda dożywotniego wyjaśnienia dla korupcji w C ++ 20 w odniesieniu do tego przykładu: auto foo() -> folly::coro::Task<int> { auto task = []() -> folly::coro::Task<int> { co_return 1; }(); return task; } Pytanie brzmi więc, czy wykonanie zwróconej przez niego coroutine foospowoduje UB. „Wywołanie” …
Ponieważ P0593 Domniemane tworzenie obiektów do manipulacji obiektami na niskim poziomie zostało zaakceptowane, obiekty mogą być teraz tworzone niejawnie w C ++ 20. W szczególności sformułowanie wprowadzone we wniosku pozwala niektórym operacjom (np. std::malloc) Automatycznie tworzyć i uruchamiać okres istnienia obiektów określonych typów, tak zwanych typów niejawnych , jeśli wprowadzenie …
Biorąc pod uwagę następujący szablon struktury: template<typename T> struct Foo { Foo(T&&) {} }; To się kompiluje i Tmożna wywnioskować, że int: auto f = Foo(2); Ale to się nie kompiluje: https://godbolt.org/z/hAA9TE int x = 2; auto f = Foo(x); /* <source>:12:15: error: no viable constructor or deduction guide for …
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.