Pytania otagowane jako language-lawyer

W przypadku pytań dotyczących zawiłości formalnych lub autorytatywnych specyfikacji języków programowania i środowisk.

1
Czy sizeof (wyliczenie) może różnić się od sizeof (typ: typ_podstawowy <Enum> :: typ)?
Niedawno pojawił się w przeglądzie kodu, który w następującym przykładzie: enum class A : uint8_t { VAL1, VAL2 }; ... std::vector&lt;A&gt; 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&lt;A&gt;::type)zamiast sizeof(A). Czy to możliwe, że mogą się one kiedykolwiek różnić? …


1
Jak kompilatory c ++ znajdują zmienną zewnętrzną?
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 …

2
Dlaczego `std :: basic_ios` ma konstruktora publicznego?
std::basic_iosma publicznego konstruktora : explicit basic_ios (std::basic_streambuf&lt;CharT,Traits&gt;* 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 …


1
Dlaczego optymalizacja pustej bazy jest zabroniona, skoro pusta klasa podstawowa jest również zmienną składową?
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 …


1
Czy to błąd w std :: gcd?
Natknąłem się na takie zachowanie, std::gcdktóre okazało się nieoczekiwane: #include &lt;iostream&gt; #include &lt;numeric&gt; int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type&lt;decltype(a), decltype(b)&gt;::type; C ca = std::abs(a); C cb = b; std::cout &lt;&lt; a &lt;&lt; …

2
Dlaczego nie możemy tworzyć obiektów łatwych do zbudowania za pomocą malloc, jeśli prosty domyślny konstruktor nie wykonuje żadnej akcji?
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 …


4
Czy wyjaśnienie swobodnego zamawiania jest błędne w preferencjach?
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); …

2
jeśli constexpr z static_assert w lambda, który kompilator jest poprawny?
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 &lt;utility&gt; template&lt;typename T&gt; constexpr …



1
Jakie są zasady oceny funkcji a -> () w Haskell?
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ć, …

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.