2013-09-05 24 views
5

私は最近C11で探求し、多くの新機能が私のコードをC言語でより簡単にします。私はこれらの機能がC++ 11で正式にサポートされているのだろうかと思います。私の懸念事項は、実装やコンパイラの問題ではなく、新しいC++標準です。C++ 11はC11の新機能をサポートしていますか?

+0

一部ですが、2つの言語に分かれています。 – chris

+0

特に、どの機能がありますか?新しいCの機能にはC++の機能もあります(ただし、@chrisは独立した言語であると言っています)。 –

+1

私はC++ 11に精通していますが、C11には馴染みがありません。ために。また、2つの言語が異なるアプローチと機能を追求し、CからC++にマッピングされない領域もあります。 –

答えて

5

いいえ、C++ 11はC11のすべての機能をサポートしていません。それはC99のすべての機能をサポートしていません。たとえば、可変長配列はC99に導入されましたが、C++ではそれらをまだサポートしていません。詳細については、this questionを参照してください。

+0

可変長配列は、C++ 14用です(ステートメントに時間枠を与えるため)。 – zneak

+0

@ noneak:いいえ、C++で考慮されている「ランタイム境界の配列」は、CのVLAと同じではありません。 –

+0

@BenVoigt、[N3820](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3820.html#dcl.array)には、 'int foo [ n] 'を非定数' n'で置き換えます。どの違いを認識すべきですか?私はそれがもはやC++ 14のために予定されていないことがわかります。 – zneak

1

C++ 11標準はC99標準、特にC標準ライブラリを参照しています。

C++ 11では、C99ではなくC90にある機能の一部をサポートしていますが、一部ではありません。 (C99固有の機能の中には、C++でサポートされていないものもあれば、適切でないものもあります)

C11はC99の上に数多くの機能を追加しました。これらの新機能のほとんどはではなく、もC++に追加されました。

例外として、スレッドサポートがあります(C11では<threads.h>、C++では<thread>)。私はこれがどれほど似ているかを知るためにこれを十分に調べていません。

(C11は、その新機能、ならびにいくつかのC99機能の一部、任意した;それはまた、C++には反映されないです)

+2

私の理解では、C11はスレッドと同期プリミティブを扱うために言語サポートとコンポーネントの両方の形式でスレッドサポートを追加しました。私はこれらの機能のすべてがC++であると思いますが、仕様はCとC++の間で必ずしも同じではありません。 –

+0

匿名構造、返り値関数、いくつかの型ジェネリック式など、他の小さなものもたくさんありました。そして、最も重要なことは、最終的に 'gets()'を取り除いたことです。 –

+0

C11にC++ 11スレッドサポート(およびアトミック)が追加されました;) –

2

主要な追加のうち二つはC11とC +との間で共有されています+11:スレッドとアトミック私は新しいメモリシーケンシングモデルも両者で共有されていると思いますが、C++ 11がそれを確実に確信できるほどよく分かりません。

C11に加えて、おそらくC++には、_Genericという一般的な式を入力することはありません。多くのユースケース、特に関数のオーバーロードには、それを実装するC++の構造体が既にあります。コンパイル時定数定数式の検出など、他のより複雑な使用例は、C++でカバーされていません。 C++ 1にはconstexprがありますが、名前以外は、式が定数式であるかどうかを判断するツールではなく、オブジェクトまたは関数の戻り値が定数であることを指定するツールではないことが示唆されます。 2つのケース(定数と非定数)に対して完全に異なるコードを生成することは可能ではないようです。

C++の主な使用例では_Genericは不要であるだけでなく、前処理段階のマクロプログラミングにも大きく依存しています。 C++コミュニティの大部分がマクロを嫌うので、それは確かにコンセンサスを見つけることはできません。

+0

downvoted。 C++ 11は 'constexpr'でコンパイル時定数式を検出できます。 – TemplateRex

+0

@TemplateRex、私はそれをどのようにCの機能と比較して調べます。私に訂正の時間を与えずにそのようなことをダウン投票すると、少し極端に思える。あなたは、最後の日に私を追いかけて、何年も前に与えたいくつかの古い答えを下降させている人は、何かチャンスですか? –

+0

いいえ、私はいつもコメントを残そうとします、そして、私は通常、答えに更新があるかどうかをチェックします。他の下降音に関しては、[この質問](http://stackoverflow.com/q/19120326/819272)であなたのタグを編集することで、昨夜のC++チャットラウンジの混乱で数人の人がいると思います。 (私のものを含む)も同時に(*コメントなしで)下降表示されました。 – TemplateRex

関連する問題