C++ 11でのソフトウェアの作成がWindowsでどれだけうまく機能するのかはまだ疑問です。 Windowsのネイティブコンパイラの1つを使用するのが最も快適です(おそらく最も自然なことです)。ここでは、Visual Studio 2012 ExpressまたはVisual Studio 2013 Expressについて考えています。これまでに私が見つけることができたすべては
現在のVisual StudioバージョンがC++ 11をどれだけうまく処理できるか、経験はありますか?私は本当にauto、lambdas、variadicテンプレート、テンプレートエイリアス、初期化リストと右辺値参照(ほんの数例を挙げると)と他のすべての優れたものの使用を開始したいのですが、Windowsが問題である場合、Cを使用する必要があるかもしれませんさらに++ 03。
もう1つの可能性は、LLVMとClangをWindowsにインストールすることです。私の主要なプラットフォームはOSXで、そのシステムではClangによるC++ 11のサポートは本当に優れています。しかし、C++(libc ++)の標準ライブラリのLLVMバージョンはWindowsではうまく機能しないことを読みました。したがって、LLVM/clangはオプションではない可能性があります。
WindowsでのC++ 11開発についてどう思いますか?
ありがとうございました!
私は、Visual C++を使用してWindowsで最先端のC++のエッジに対して構築してきただけでなく、他のいくつかのコンパイラとIDEをインストールしているため、開発者としての私の経験のみを提供できます(WindowsでのVisual C++のビルドを含む) Studio 2012、2012 CTP、2013プレビュー)。以下は、現在(2013年8月13日)までの私の経験です。これは Herb Sutterの講演 に基づいており、毎日コンパイラーで作業しています。
クイック
Visual Studio/VC++の反対方向で実行します。 C++ 11のサポートは遅く、現在ClangやGCCと比較して、コンパイラー機能の点で圧倒されています。
現在
Visual C++のC++ 11(およびC++ 14のサポート)は、現時点ではひどいものです。 C++でのテンプレートメタプログラミングを素晴らしいものにする強力な機能(特にusing
式)が不足しています。
現在、使用は存在しません。私はusing
を使用して素晴らしいC++ 11コードをVC++に移植するのに何時間も費やしましたが、特定の場所を壊したり、スナップしたり、または単にメンテナンスできなくなったりするだけです。
CTPのVariadicサポートは恐ろしくひどいもので、Visual Studio 2013 Previewのバージョンのコンパイラでは改善されましたが、標準に準拠した複雑なVariadicおよびテンプレート式ではかなり悪い(そしてGCCとClangでうまくコンパイルできる)。
=delete
および=default
は、現在VC++からほとんど削除されています。近い将来に期待できますが、うまくいくかもしれません(ロードマップによれば、「すぐに」実現するはずです)(8クラスの継承まで、多くの単純なクラスに対してr値コンストラクタを明示的に実装する必要がありました)これは、GCCとClangのユーザーが=default
を使用して、明示的にハードコードされたすべての作業を無料で取得するのを見たとき、最悪のスラップでした。
ホールドオーバーとして(主にWindows OSコードといくつかのバイナリ互換性のため)、VC++のEmpty-Base-Class-Optomizationsは機能しません。クラス階層のサイズやメンバーのレイアウトが最小限に最適化されると期待しないでください(変数の型をパックするときは、std::Tuple
での順序に注意してください)。
これは私がこれまでに接触したすべての欲求不満についてです。それらは回避可能です-私は毎日彼らと一緒に仕事をしなければなりません-しかし、素晴らしいC++サポートが必要な場合は、GCCまたはClangにジャンプして、どういうわけかそれをマシンで動作させる必要があります。
未来
本当にC++ 11が必要な場合は、約1年待つ必要があります。それでも、Visual Studio 2013のVC++のリリースにはいくつかの機能がありません(バグのないものとは思わないでください)。 2013年のVC++でも、多くの場所でstd :: moveと明示的なr値のサポートが欠落しているため、正常に機能することを期待すると苦痛です。
警告
強力なVimユーザーではない場合、操作できるIDE(GDB/GCCまたはClangでうまく機能する)のオプションは少なくなります。
ライブラリについて
VC++でのライブラリのサポートはかなり完全です(壊れたコンパイラがそれらを完全なものにするのと同じくらい)。それは正規表現を持っていますが、他のほとんどのライブラリは存在しないか壊れた正規表現サポートを持っています。しかし、これはVC++が ライブラリがC++ 11の一部の機能を備えており、その機能を備えていると言っている (-- melak47 による画像)という意味ではありません。
そして最後に
あなたが知っているコードがWindowsで100%機能することを望むなら、残りの永遠のために、おそらくVC++に対してプログラムしたいと思うでしょう。もう1つの「利点」は、VC++で作成するコードがC++/C++ 11の最小サブセットであるため、最終的にはどこでもコンパイルできることです。もちろん、それは美しいC++ 11を使用して楽しむという考えそのものに反するので、毒を賢く選んでください。
VCのC++ 11サポートは完全とは言えませんが、最も重要なユーザー向け機能が含まれています。
そして、他のことです。私の経験では、MinGWまたはClangをWindowsにインストールすることは問題ありませんが、これらのコンパイラのバイナリをWindows用にプリコンパイルする人はほとんどいないので(多くの人がVisual Studio用のバイナリをプリコンパイルするので)、不便が発生します。
さらに、私が認識している限り、グラフィカルデバッグ、インテリセンスなどの機能について、Visual Studioと同じくらい高度に進んだWindowsの環境はありません。 Code :: Blocksを試したところ、現実的には機能しませんでした。
C++ 11言語機能のコンパイラサポートの包括的な比較については、 こちら を参照してください。 こちら VSのC++ 11/14ロードマップに関する情報。
MSVCは他の主要なC++コンパイラに遅れをとっていますが、最も重要な機能の多くはまだサポートされています。
auto、lambdas、およびrvalueの参照は、VS10から使用できます。 IIRCコンパイラが移動構築および移動代入演算子を生成しないという、右辺値参照に関する警告があります。
可変長テンプレートと初期化子リストは、ライブラリサポートを含め、VS2013プレビューで利用できます。
タイプエイリアス(つまり、using
キーワードを使用したtypedefs)は、VS 2013 RTMで利用可能になる予定です。
VSによって生成されたバイナリと相互運用する必要がない場合は、GCCなどの別のコンパイラをインストールすることで問題が解決します。 Clangはlibc ++ではなくlibstdc ++を使用するmingw環境でも動作することを理解しています。
Nuwenディストリビューションは素晴らしいです!これはMinGWですが、GCCの新しいリリースがリリースされるため、MinGWよりもはるかに迅速にリリースされます。また、すでにコンパイルされたすべてのboostおよびその他の便利なライブラリも付属しています。 Windowsで使用するのはこれだけです。
私はVS2012を使用しており、可能な場合はC++ 11機能を使用しています。実装にはいくつかのバグがあり、Visual Studioから比較するエラーが発生したときに別のコンパイラーを用意しておくと便利です。
いくつかのhere.com製品では、WindowsおよびLinuxの製品ソフトウェアですでに数か月間C++ 11を問題なく使用しています。ここでは、自動、ラムダ、範囲を使用しています... Visual Studio 2012とgcc 4.7を使用しています。
ClangとGCCは、C++ 11機能のサポートの面で先導しており、C++ 11のサポートの点では、2つの間の首相争いのようです。 MSVCは、遅れずに追いついて遅れをとろうと悲しそうに喘いでいます。 Nuwen MingGWディストリビューションは、Jakeが言及しているように優れており、Eclipse(Keplerリリース)でうまく機能しているようで、Netbeans 7.4でそれを使用してもあまり苦労しませんでした。 Nuwenディストリビューションは、執筆時点では現在バージョン11.2であり、 StephanのWebサイト で確認できるように、GCC 4.8.1とBoost 1.54.0を備え、GCCのデフォルトを備えたx64ネイティブです。モードもC++ 11に設定されています。
私は確かにますますMSVC 2012よりもEclipse KeplerとNuwen MinGWを使用し始めていますが、私は主に趣味のC++プログラマーであり、まだ足を濡らしているため、C++を使用している人よりも不明瞭な問題に直面していない可能性があります彼らのパンとバターは知っているかもしれません。