Pytania otagowane jako language-lawyer

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

13
Jak utworzyć nieskończoną pustą pętlę, która nie zostanie zoptymalizowana?
Standard C11 wydaje się sugerować, że instrukcje iteracji ze stałymi wyrażeniami kontrolującymi nie powinny być optymalizowane. Czerpię radę z tej odpowiedzi , która konkretnie cytuje sekcję 6.8.5 projektu standardu: Instrukcja iteracji, której wyrażenie kontrolne nie jest wyrażeniem stałym ... może zostać przyjęte przez implementację jako zakończona. W tej odpowiedzi wspomniano, …


5
Definicja operatora „==” dla Double
Z jakiegoś powodu podkradałem się do źródła .NET Framework dla tej klasy Doublei odkryłem, że deklaracja ==to: public static bool operator ==(Double left, Double right) { return left == right; } Ta sama logika obowiązuje dla każdego operatora. Jaki jest sens takiej definicji? Jak to działa? Dlaczego nie tworzy nieskończonej …
126 c#  .net  language-lawyer 


2
Przechwytywanie lambda i parametr o tej samej nazwie - kto przesłania drugi? (clang przeciwko gcc)
auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); clang ++ 3.6.0 i nowsze wydrukuj "Używasz clang ++!" i ostrzegaj o niewykorzystaniu przechwytywania foo . g ++ 4.9.0 i nowsze wydrukuj "Używasz g ++!" i ostrzec o nieużywanym parametrze foo . Który …

6
Lambda powraca: czy to legalne?
Rozważ ten dość bezużyteczny program: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto it = [&](auto self) { return [&](auto b) { std::cout << (a + b) << std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } Zasadniczo próbujemy utworzyć lambdę, która sama się zwraca. MSVC kompiluje …

3
Czy użycie if (0) do pominięcia przypadku w przełączniku powinno działać?
Mam sytuację, w której chciałbym, aby dwa przypadki w instrukcji przełącznika C ++ przechodziły do ​​trzeciego przypadku. W szczególności druga sprawa przechodziłaby do trzeciej sprawy, a pierwsza sprawa również przechodziłaby do trzeciej sprawy bez przechodzenia przez drugą sprawę. Miałem głupi pomysł, wypróbowałem go i zadziałało! I owinięty drugi przypadek w …



2
Program jest kompilowany inaczej w 3 głównych kompilatorach C ++. Który jest poprawny?
Jako ciekawa kontynuacja (choć nie ma to dużego znaczenia praktycznego) mojego poprzedniego pytania: Dlaczego C ++ pozwala nam umieszczać nazwę zmiennej w nawiasach podczas deklarowania zmiennej? Dowiedziałem się, że połączenie deklaracji w nawiasach z właściwością wstrzykniętej nazwy klasy może prowadzić do zaskakujących wyników w zachowaniu kompilatora. Spójrz na następujący program: …

8
Używając nagłówków C w C ++, czy powinniśmy używać funkcji z std :: czy globalnej przestrzeni nazw?
C jest w pewnym sensie, nie do końca, podzbiorem C ++. Więc możemy używać większości funkcji / nagłówków C w C ++, zmieniając nieco nazwę ( stdio.hna cstdio, stdlib.hna cstdlib). Moje pytanie jest właściwie semantyczne. W kodzie C ++ (przy użyciu najnowszej wersji kompilatora GCC) mogę wywołać printf("Hello world!");i std::printf("Hello …
113 c++  language-lawyer  std 

8
Co to jest „piekło zwrotne” i jak i dlaczego RX go rozwiązuje?
Czy ktoś może podać jasną definicję wraz z prostym przykładem wyjaśniającym, czym jest „piekło zwrotne” dla kogoś, kto nie zna JavaScript i node.js? Kiedy (w jakich ustawieniach) pojawia się „problem z piekłem zwrotnym”? Dlaczego tak się dzieje? Czy „piekło zwrotne” jest zawsze związane z obliczeniami asynchronicznymi? A może „piekło zwrotne” …


2
Skutecznie finał vs finał - inne zachowanie
Do tej pory uważałem, że ostatecznie ostateczne i ostateczne są mniej więcej równoważne i że JLS potraktuje je podobnie, jeśli nie identyczne w rzeczywistym zachowaniu. Potem znalazłem ten wymyślony scenariusz: final int a = 97; System.out.println(true ? a : 'c'); // outputs a // versus int a = 97; System.out.println(true …


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.