Pytania otagowane jako language-lawyer

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

3
Kiedy należy używać metody @classmethod, a kiedy metody def (self)?
Podczas integracji aplikacji Django, której wcześniej nie używałem, znalazłem dwa różne sposoby definiowania funkcji w klasach. Autor wydaje się używać ich obu bardzo celowo. Pierwszy to ten, którego sam często używam: class Dummy(object): def some_function(self,*args,**kwargs): do something here self is the class instance Drugi to taki, którego nie używam, głównie …

2
Dlaczego w Roslyn znajdują się klasy maszyn stanu asynchronicznego (a nie struktury)?
Rozważmy tę bardzo prostą metodę asynchroniczną: static async Task myMethodAsync() { await Task.Delay(500); } Kiedy kompiluję to za pomocą VS2013 (kompilator sprzed Roslyn), wygenerowana maszyna stanu jest strukturą. private struct <myMethodAsync>d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } Kiedy kompiluję go z VS2015 (Roslyn), wygenerowany kod wygląda …

2
std :: ignore z powiązaniami strukturalnymi?
Preludium: std::tuple<int, int, int> f(); std::tuple<int, int, float, int> g(); C ++ 1z wprowadzi składnię powiązań strukturalnych, która umożliwi pisanie zamiast int a, b, c; std::tie(a, b, c) = f(); coś jak auto [a, b, c] = f(); Jednak można std::tierównież określić std::ignoreignorowanie niektórych komponentów, np .: std::tie(a, b, std::ignore, …


6
Dlaczego odwołania nie są „stałymi” w C ++?
Wiemy, że „zmienna stała” oznacza, że ​​raz przypisana nie można zmienić zmiennej, na przykład: int const i = 1; i = 2; Powyższy program nie skompiluje się; gcc wyświetla komunikat z błędem: assignment of read-only variable 'i' Nie ma problemu, rozumiem to, ale następujący przykład jest poza moim zrozumieniem: #include<iostream> …


3
Czy legalne jest, aby kod źródłowy zawierający niezdefiniowane zachowanie powodował awarię kompilatora?
Powiedzmy, że zamierzam skompilować słabo napisany kod źródłowy w C ++, który wywołuje niezdefiniowane zachowanie, a zatem (jak mówią) „wszystko może się zdarzyć”. Z punktu widzenia tego, co specyfikacja języka C ++ uważa za dopuszczalne w kompilatorze zgodnym z wymaganiami, robi „cokolwiek” w tym scenariuszu, w tym awarię kompilatora (lub …

6
Czyste funkcje: czy „brak efektów ubocznych” oznacza „zawsze ten sam wynik, przy tym samym wejściu”?
Dwa warunki definiujące funkcję puresą następujące: Brak skutków ubocznych (tj. Dozwolone są tylko zmiany w zakresie lokalnym) Zawsze zwracaj to samo wyjście, mając te same dane wejściowe Jeśli pierwszy warunek jest zawsze prawdziwy, czy zdarza się, że drugi warunek nie jest prawdziwy? Czy naprawdę jest to konieczne tylko w przypadku …


2
Czy nadal można bezpiecznie usunąć nullptr w c ++ 0x?
W c++03nim jest całkiem jasne, że usuwając wskaźnik NULL nie ma żadnego wpływu. Rzeczywiście, jest wyraźnie stwierdzone, §5.3.5/2że: W obu przypadkach, jeśli wartość operandu delete jest pustym wskaźnikiem, operacja nie ma żadnego efektu. Jednak w obecnym projekcie dla c++0xtego zdania wydaje się być brakuje. W pozostałej części szkicu mogłem znaleźć …



4
Czy wykonywanie memcpy (0,0,0) jest bezpieczne?
Nie jestem dobrze zorientowany w standardzie C, więc proszę o wyrozumiałość. Chciałbym wiedzieć, czy standard gwarantuje, że memcpy(0,0,0)jest to bezpieczne. Jedynym ograniczeniem, jakie mogłem znaleźć, jest to, że jeśli regiony pamięci nakładają się, to zachowanie jest niezdefiniowane ... Ale czy możemy wziąć pod uwagę, że obszary pamięci nakładają się tutaj?

4
Jak ta struktura może mieć sizeof == 0?
Jest stary post z prośbą o konstrukcję, dla której sizeofwróci 0. Istnieje kilka odpowiedzi z wysokimi wynikami od użytkowników o wysokiej reputacji, którzy twierdzą, że standardowo żaden typ ani zmienna nie może mieć rozmiaru 0. I zgadzam się z tym w 100%. Jest jednak nowa odpowiedź, która przedstawia to rozwiązanie: …

4
Inny operator rzutowania wywoływany przez różne kompilatory
Rozważmy następujący krótki program w C ++: #include <iostream> class B { public: operator bool() const { return false; } }; class B2 : public B { public: operator int() { return 5; } }; int main() { B2 b; std::cout << std::boolalpha << (bool)b << std::endl; } Jeśli skompiluję …

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.