Niedawno zbadane w C11 i wiele nowych funkcji sprawia, że łatwiej mi kod w C. Zastanawiam się, że WSZYSTKIE funkcje są oficjalnie wspierane przez C++ 11. Obawiam się, że nie chodzi o problemy z implementacją lub kompilatorem, ale o nowy standard C++.Czy C++ 11 obsługuje nowe funkcje C11?
Odpowiedz
Nie, C++ 11 nie obsługuje WSZYSTKICH funkcji C11. Nie obsługuje nawet wszystkich funkcji C99. Tablice o zmiennej długości, na przykład, zostały wprowadzone w C99, ale C++ jeszcze ich nie obsługuje. Aby uzyskać szczegółowe informacje, patrz this question.
Tablice o zmiennej długości są przeznaczone dla C++ 14 (tylko po to, aby podać czas do wyciągu). – zneak
@zneak: Nie, "tablice związane z runtime" rozpatrywane dla C++ nie są tym samym co VLA C. –
@BenVoigt, [N3820] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3820.html#dcl.array) zawiera przykładowy formularz 'int foo [ n] 'o niestałym' n'. Jakie różnice powinienem znać? Widzę jednak, że nie jest on już przeznaczony dla C++ 14. – zneak
Standard C++ 11 odwołuje się do standardu C99, w szczególności do standardowej biblioteki C.
C++ 11 obsługuje niektóre, ale nie wszystkie, funkcje, które są w C99, ale nie w C90. (Niektóre funkcje specyficzne dla C99 są obsługiwane w inny sposób w C++ lub nie zostały uznane za odpowiednie).
C11 dodał szereg funkcji nad C99; większość z tych nowych funkcji została dodana do C++ w postaci , a nie.
Jednym z godnych uwagi wyjątków jest obsługa wątków (<threads.h>
w C11, <thread>
w C++ 11). Nie przyjrzałem się temu wystarczająco dokładnie, aby wiedzieć, jak są podobne.
(C11 wykonane również niektóre z jego nowych funkcji, a także niektórych funkcji C99, opcjonalnie;., Że nie jest również odzwierciedlenie w C++)
Rozumiem, że C11 dodaje obsługę wątków, zarówno w formie obsługi języków, jak i komponentów używanych do obsługi wątków i prymitywów synchronizacji. Myślę, że wszystkie te funkcje są w C++, chociaż specyfikacje niekoniecznie są identyczne między C i C++. –
Było też wiele innych drobiazgów, takich jak anonimowe struktury, brak funkcji zwracania, niektóre wyrażenia rodzajowe i tym podobne. I, co najważniejsze, w końcu pozbył się 'gets()'. –
C11 dodał obsługę wątku C++ 11 (i atomów) bardziej niż odwrotnie;) –
Wśród głównych dodatków, dwa są wymieniane między C11 i C + +11: wątki i atomics. Myślę, że nowy model sekwencjonowania pamięci jest dzielony między tymi dwoma, ale nie znam C++ 11 na tyle, aby to potwierdzić z całą pewnością.
Jedno z głównych dodatków do C11 prawdopodobnie nigdy nie zostało udostępnione przez C++: wpisz ogólne wyrażenia z _Generic
. Dla wielu przypadków użycia tego, w szczególności przeciążania funkcji, istnieją już konstrukty C++, które implementują to. Inne, bardziej rozbudowane przypadki użycia, takie jak wykrywanie stałych stałych wyrażeń całkowitoliczbowych, nie są objęte C++. C++ 1 ma constexpr
, ale inne niż nazwa może sugerować, że nie jest to narzędzie do określenia, czy wyrażenie jest wyrażeniem stałym, ale do określenia, że obiekt lub funkcja zwracana jest stała. Generowanie zupełnie innego kodu dla dwóch przypadków (stałego i niestałego) nie wydaje się możliwe.
Nie tylko to, że _Generic
nie jest potrzebne w głównych przypadkach użycia w C++, ale w dużym stopniu opiera się na programowaniu makr w fazie wstępnej. Ponieważ makra są niezadowolone z powodu dużej części społeczności C++, która z pewnością nie znajdzie konsensusu.
odrzucono. C++ 11 może wykrywać stałe wyrażenia w czasie kompilacji za pomocą 'constexpr'. – TemplateRex
@TemplateRex, przyjrzę się temu, w jaki sposób porównuje się do funkcji C. Zgubienie się za taką rzeczą, nie dając mi czasu na poprawki, wydaje się nieco ekstremalne. Czy przypadkiem nie gonisz mnie w ostatnim dniu i nie zgodzisz się na kilka starych odpowiedzi, które dałem przed laty? –
Nie, staram się zawsze dodawać komentarze, a ja zazwyczaj sprawdzam, czy jest aktualizacja odpowiedzi, aby móc wycofać jakiekolwiek spadki. Jeśli chodzi o inne komentarze, myślę, że wczoraj wieczorem zdarzyło się, że kilka osób zdenerwowało czat w salonie C++ w związku z edytowaniem tagów w [to pytanie] (http://stackoverflow.com/q/19120326/819272), w którym dwie górne odpowiedzi (w tym jeden z moich) również zostały odrzucone w tym samym czasie (* bez * komentarza). – TemplateRex
Niektóre, ale są to dwa osobne języki. – chris
Jakie funkcje, w szczególności? Niektóre nowe funkcje C to także funkcje w C++ (ale nie ma gwarancji, ponieważ @chris mówi, że są to niezależne języki). –
Jestem zaznajomiony z C++ 11, ale nie z C11: pomoże to wiedzieć, co konkretnie szukasz dla. Istnieją również obszary, w których oba języki realizują różne podejścia i funkcje nie będą mapowane z C na C++. –