Niedawno pojawił się w przeglądzie kodu, który w następującym przykładzie: enum class A : uint8_t { VAL1, VAL2 }; ... std::vector<A> vOfA; // Assume this is sized and full of some stuff. std::memcpy(wire_buffer, vOfA.data(), vOfA.size() * sizeof(A)); Powinniśmy używać sizeof(std::underlying_type<A>::type)zamiast sizeof(A). Czy to możliwe, że mogą się one kiedykolwiek różnić? …
Kompiluję ten program przez g ++ i clang ++. Jest różnica: g ++ drukuje 1, ale clang ++ drukuje 2. Wygląda na to, że g ++: zmienna zewnętrzna jest zdefiniowana w najkrótszym zakresie. clang ++: zmienna zewnętrzna jest zdefiniowana w najkrótszym globalnym zakresie. Czy specyfikacja C ++ ma jakieś specyfikacje …
std::basic_iosma publicznego konstruktora : explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb); IMO, jedynym powodem, dla którego klasa ma konstruktora publicznego, jest użycie autonomicznej instancji tej klasy w programie. Jeśli klasa istnieje tylko po to, aby inne klasy z niej wywodziły się (jak się wydaje basic_ios), wszystkie konstruktory klasy powinny być protected. Wszystkie konstruktory …
Czy do zakończenia programu wymagany jest program? Innymi słowy, czy program, który działa wiecznie, jest technicznie niezdefiniowanym zachowaniem? Uwaga: nie chodzi o puste pętle. Mówiąc o programach, które na zawsze wykonują „rzeczy” (tj. Obserwowalne zachowania). Np. Coś takiego: int main() { while (true) { try { get_input(); // calls IO …
Optymalizacja pustej bazy jest świetna. Obejmuje jednak następujące ograniczenie: Optymalizacja pustej bazy jest zabroniona, jeśli jedna z pustych klas bazowych jest również typem lub bazą typu pierwszego niestatycznego elementu danych, ponieważ dwa podstawowe podobiekty tego samego typu muszą mieć różne adresy w reprezentacji obiektu najbardziej pochodnego typu. Aby wyjaśnić to …
Czy to jest poprawny C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC i MSVC uważają, że jest w porządku, Clang uważa, że tak nie jest: Compiler Explorer . Wszystkie kompilatory zgadzają się, że ten jest w porządku: Eksplorator kompilatorów . int main() …
Natknąłem się na takie zachowanie, std::gcdktóre okazało się nieoczekiwane: #include <iostream> #include <numeric> int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type<decltype(a), decltype(b)>::type; C ca = std::abs(a); C cb = b; std::cout << a << …
Mam trudności ze zrozumieniem poniższego akapitu cytowanego z cpreferencji na temat trywialnego domyślnego konstruktora. Przeszukałem stackoverflow, ale nadal nie otrzymałem jasnej odpowiedzi. Więc proszę o pomoc. Trywialny domyślny konstruktor to konstruktor, który nie wykonuje żadnej akcji. Wszystkie typy danych kompatybilne z językiem C (typy POD) są trywialnie domyślne. W przeciwieństwie …
Chcę napisać przenośny kod (Intel, ARM, PowerPC ...), który rozwiązuje wariant klasycznego problemu: Initially: X=Y=0 Thread A: X=1 if(!Y){ do something } Thread B: Y=1 if(!X){ do something } w którym celem jest uniknięcie sytuacji, w której robią oba wątkisomething . (W porządku, jeśli żadna rzecz nie działa; nie jest …
W dokumentacji std::memory_orderna cppreference.com jest przykład swobodnego zamawiania: Zrelaksowane zamawianie Oznaczone operacje atomowe memory_order_relaxednie są operacjami synchronizacji; nie narzucają kolejności między dostępami do pamięci jednocześnie. Gwarantują one tylko atomowość i spójność kolejności modyfikacji. Na przykład, gdy xiy początkowo wynoszą zero, // Thread 1: r1 = y.load(std::memory_order_relaxed); // A x.store(r1, std::memory_order_relaxed); …
Kiedy chcemy używać static_assertw sposób if constexprmusimy warunek zależny od jakiegoś parametru szablonu. Co ciekawe, gcc i clang nie zgadzają się, gdy kod jest zawarty w lambda. Poniższy kod kompiluje się z gcc, ale clang wyzwala aser, nawet jeśli if constexprnie może to być prawda. #include <utility> template<typename T> constexpr …
MSVC, Clang i GCC nie zgadzają się na ten kod: struct Base { int x; }; struct Der1 : public Base {}; struct Der2 : public Base {}; struct AllDer : public Der1, public Der2 { void foo() { Der1::Base::x = 5; } }; Godbolt GCC: <source>: In member function …
Tak jak w tytule: jakie są gwarancje, że jednostka zwrotna funkcji Haskell zostanie poddana ocenie? Można by pomyśleć, że w takim przypadku nie ma potrzeby przeprowadzania żadnej oceny, kompilator mógłby zastąpić wszystkie takie wywołania natychmiastową ()wartością, chyba że istnieją wyraźne żądania zachowania ścisłości, w którym to przypadku kod może zdecydować, …
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.