8

大規模なマルチ プラットフォームのリアルタイム ネットワーク アプリケーションに取り組んでいます。私が取り組んでいるプロジェクトでは、コンテナや標準ライブラリ全般を実際に使用することはなく、スマート ポインターや「最新の」C++ 言語機能はまったくありません。多くの生の動的に割り当てられた配列は一般的な場所です。

私は標準ライブラリと C++11 仕様の一部を使い始めたいと思っていますが、「STL / C++11 は移植性が低く、それを使用して危険を冒してください。」本格的な Ubuntu/Windows/Mac OS システムだけでなく、さまざまな組み込みシステムでソフトウェアを実行しています。

それで、私の質問に; 標準ライブラリと C++11 に関する移植性の実際の問題は何ですか? g++ が特定のバージョンを過ぎているだけの場合ですか? サポートされていないプラットフォームはありますか? コンパイルされたライブラリは必要ですか? もしそうなら、入手/コンパイルは困難ですか? 移植性のない純粋な C++ によって深刻な問題が発生した人はいますか?

4

5 に答える 5

3

あなたが話している人々は、いくつかの異なる問題を混乱させています。現在、C++11 はあまり移植性がありません。100% サポートしているコンパイラはないと思います (間違っているかもしれませんが)。2 つまたは 3 つのプラットフォーム (Windows と Linux、そしておそらく Apple) で最新のコンパイラに制限する場合 (およびその場合にのみ)、その大部分を使用することから逃れることができます。これらは最も目に見えるプラットフォームですが、すべてのマシンのごく一部にすぎません。(大規模なネットワーク アプリケーションに取り組んでいる場合は、Solaris がおそらく重要であり、Sun CC も重要です。私が最後に取り組んでから Sun が大幅に変更されていない限り、それは、C++03 の一部でさえできることを意味します。頼りになります。)

STL はまったく別の問題です。それは部分的に STL の意味に依存しますが、今日使用する際の移植性の問題は確かにありませんstd::vectorlocale ごく少数のコンパイラ (Rogue Wave ライブラリと Stlport ライブラリの両方を使用する Sun CC を使用) と一部のアルゴリズムで問題が発生する可能性がありますが、ほとんどの場合、C++03 のすべてをほぼ当てにできます。 .

そして最後に、代替手段は何ですか?を持っていない場合は std::vector、それとほぼ同じものを実装することになります。の存在が本当に心配 std::vectorな場合は、独自のクラスにラップしてください。利用できない場合は (タイムマシンで戻らない限り、非常にありそうにありません)、事前標準で行ったのとまったく同じように再実装してください。日々。

于 2013-01-28T21:55:02.133 に答える
3

C++ のコンパイラは、標準ライブラリのいくつかのバージョンをサポートする必要があります。標準ライブラリは C++ の一部です。サポートされていないということは、コンパイラが C++ コンパイラではないことを意味します。現在使用しているコンパイラのいずれかが C++03 標準ライブラリを移植可能にサポートしていない場合、私は非常に驚かれることでしょう。もちろん、コンパイラは 2003 年以降に更新されている必要がありますが、古いコンパイラでしかサポートされていない古いシステム用にコンパイルしない限り、問題はありません。

C++11 に関しては、現時点でサポートはかなり充実しています。GCC と MSVC の両方で、C++11 標準ライブラリの大部分が既にサポートされています。繰り返しになりますが、これらのコンパイラの最新バージョンを使用していて、コンパイルしたいシステムがサポートされている場合、サポートされている C++11 標準ライブラリのサブセットを使用できない理由はありません。それのすべて。

標準ライブラリのない C++ は C++ ではありません。言語とライブラリの機能は密接に関連しています。

GCC の libstdc++およびMSVC 2012でサポートされている C++11 ライブラリ機能のリストがあります。LLVM の libc++ に似たものは見つかりませんが、clang c++11 サポート ページがあります。

于 2013-01-28T20:56:35.423 に答える
3

新しい C++11 標準のライブラリ サポートは、Visual C++ 2012、gcc >= 4.7、および Clang >= 3.1 のいずれかに対してかなり完全です。個々の言語機能すべてに対するコンパイラのサポートは、別の問題です。サポートされている C++11 機能の最新の概要については、このリンクを参照してください。

組み込み/リアルタイム環境での C++ の詳細な分析については、Scott Meyers のプレゼンテーション資料が非常に優れています。仮想関数、例外処理、テンプレートなどのコストについて説明します。特に、ヒープ割り当て、ランタイム型情報、例外など、リアルタイム システムにとって重要な最悪の場合のタイミング保証が不確定なC++ 機能の彼の分析を参照することをお勧めします。

それはあなたの主な関心事であるべきであり、移植性ではなく、その種の問題です(おばあちゃんのペースメーカーを気にしているなら...)

于 2013-01-28T20:50:24.750 に答える
0

サポートされている場合は、既存のコンパイラでSTLPortを使用します。これは単なるコードのライブラリであり、他のライブラリを問題なく使用できますよね?

于 2013-01-28T22:00:01.717 に答える