C++は汎用的な言語であり、開発環境も多種多様そろっているため、本来、向き不向きというのはない。ただし、それでも以下のように、向き不向きが分かれるように考えられる。

 

1.不向き

・Webアプリケーション、Webサービス

つまり、多くの場合phpやRuby、C#やJavaで作られるWebアプリケーションやWebサービスだ。別にC++で作れないわけではないが、C++の利点がまったく生きず、逆にデプロイの面倒さが足を引っ張るばかりで、C++を使う旨みがまったくない。

 

・帳票出力

これもまた、C++で作れないわけではないが、そもそも作ったやつがいるのか?というぐらい、C++が使われない分野である。もしかすると、大量のPDFファイルを短時間で作るためにC++を使う、という選択が行われることがあるかもしれないが。

 

・それほど速度や柔軟さが求められないデスクトップアプリケーション

画面のフォーマットが固定的であり、かつ、それほど速度が求められないデスクトップアプリケーションを作るのにC++を使うのは、牛刀を以ってなんとやらである。こういったジャンルはC#に任せておけばいい。MFCは、デスクトップアプリケーションを作るには旧式なライブラリになりつつあり、Windows10に積極的に対応する気配も見られない。

 

2.向き

・サーバー

ApacheやnginxのようなWebサーバーは、C++の先祖であるCで作られている。1秒間に10000を超えるトランザクションをこなせる言語は、CやC++だけではないが、それほど多くはないのだ。

 

・柔軟なデスクトップアプリケーション
C#が(そして、それを支える.net Frameworkが)着実な進歩を見せていても、依然、ExcelやWordはC++ベースで作られている。それはなぜか。ある一定の複雑さを超えると、.net Frameworkは、ある種の限界に達し、驚くほど動きが重くなるのだ。そして、C#は.net Frameworkの枠を超えて動くことはできない。それゆえ、多くのヘビー級デスクトップアプリケーションは、依然C++によって作られている。

 

・重いデータ処理

 この場合のデータ処理は、以前挙げたXercesの例のような文書処理であったり、多くのデータを使用した統計計算である。データ量が少ないうちはJavaもC++も、それほど処理速度に変わりはないが、ある一点を超えると、Javaはいきなり遅くなる。データ量と処理速度の関係が1次関数的ではないのだ。

 事前にデータ量の見積もりが完全にできていれば何の問題もないが、そんなケースは存在しない。メモリやプロセッサのリソース過少による異常な遅延があってはならないので、多くの場合は多めに見積もることになる。結果、「実際には半分も使ってなかったね」、という結果に終わる。