• ベストアンサー

C++特有の機能って現場で使われてますか?

私が今までに経験した仕事ですと、STLのコンテナぐらいで スマートポインタやジェネリックプログラミングは使っていませんでした。 ゲームなどには使われているのでしょうか?

noname#115727
noname#115727

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

ゲームメーカーに勤めています。 ゲームメーカーによりますが、私の経験でお話しますと 基本的にC++は使います。 たとえばclassの継承などは普通に使いますし、STLも使います。独自テンプレートも書きます。 (数年前プレーンCとアセンブラのみのところもありましたが、今もあるかは知りません。) ゲームの場合、実行速度は重要なので例えば オーバーライドすることによりCPUの分岐予測が無効になるような環境では コアな部分でオーバーライドやclassの継承を禁止する等の制限をすることはあります。 またSTLコンテナを使うにしてもstd::allocatorをそのまま使ったのでは 環境によって使い物にならないことが多いため 自分で書くことが多いですし スマートポインタに関しても独自に実装している場合が多いです。(ツール等ではboostを使う場合もあります。) ※私の経験から話していますが基本的にメーカーやプロジェクトに依るところが大きいと思います。

noname#115727
質問者

お礼

回答ありがとうございます。 やっぱりゲームだと使われているんですね。大変参考になりました。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

C++特有の機能というのが何を想定しているのかよくわかりませんが... > STLのコンテナぐらいで STLのコンテナを使いこなすためには、テンプレート、演算子多重定義、例外処理、関数オブジェクトなどを使うはずですので、それらはC++特有の機能だと思います。

noname#115727
質問者

お礼

回答ありがとうございます。 たしかに使いこなすには必要ですが、イテレータ使ってループさせているだけのプロジェクトが多かったです。

関連するQ&A

  • VC++.NETと標準C++とSTLの相性などの質問事項

    自己研鑽のために、標準C++を学習し、STLについても学習しました。仕事で、Javaの経験が半年以上あります。正直な感想、勉強してみると、C++のほうが、気に入ってしまいました。 マイクロソフト関連の仕事をしたことがなく、VisualBasicすらありません。最近では、C#.NETなどがでてきています。 C#2.0やjavaのJ2SE5.0ででてくるGenericや、コレクションクラスにGenericを考慮したものが でてくる。など、C++のSTLの模倣のように感じました。 C#にはデリゲートがあるようですが。関数ポインタや関数オブジェクトそのまんまに見えます。 C#2.0が気になりますがまだ、ベータ版で未来の話なので、Visul C++.NETに興味を持ちました。せっかく勉強した標準C++やSTLの知識はそこでは役に立つのでしょうか。.NETにはそちのほうで独自のstring型やコレクション型があるのではないでしょうか? .NETだと、マネージコードなどガベージコレクトがあるようです。STLのコンテナはそれぞれ内部でデストラクタがヒープの内容を廃棄してくれますが、ガベージコレクトの環境で普通にSTLを使うとどういうことになるのでしょうか? 今度、Visual C++.NETの学習をはじめるかどうかの判断材料にしたいので、現時点までの知識が有効活用できるかどうかを知りたいです。宜しくお願いいたします。

  • クラスとSTLコンテナについて

    使用しているコンパイラおよびSTLはVisual Studio 2008 Professional付属のものです C++にてSTLのコンテナにクラスオブジェクトを入れて使用しようと考えています しかし、オブジェクトをコンテナへ挿入・削除した際に何度もコピーコンストラクタが呼び出されているのを確認しました コンテナ内に直接、比較的大きめのリソースを持つオブジェクトを多数入れた場合、オブジェクトのコピーだけでパフォーマンスに影響が出るのではないか、と感じました これはコンテナを使う上では許容しないといけないことなのでしょうか? クラスオブジェクトを直接ではなく、ポインタで入れた場合は、コンテナ削除時にデストラクタが呼ばれないため、クラスポインタとコンテナの組み合わせはしてはいけないと認識しています クラスとコンテナを組み合わせて使用する場合は、boostのshard_ptrを使用するのが、パフォーマンスを考慮する上では最も良い選択なのでしょうか? それとも、それ以外の常識的な使用方法があるのでしょうか? 回答よろしくお願いします

  • 参照型を格納できるコンテナについてなど

    ちょっと長文です。下のほうに質問があります。 STLのvectorコンテナを使用しているのですが、 困った事態が発生しています。 自分は、参照型を要素として、持たしたいのですが、 持たすことができません。 なにやら調べてみたところ、STLのコンテナクラスというのは 基本的に「値ベースのコンテナ」らしく、「参照ベースのコンテナ?」 としてコンテナを使うには、ポインタ型を格納して下さい。との ことでした。 ただし、この方法は2重deleteが発生する危険性を孕んでいるので、 Boostのなんかのポインタークラス?のようなものを使えば、 そのような問題に悩まされることないですよー。とありました。 ここで問題なのは、 ・Boostを扱えるだけの知識がない。 ・そもそもBoostを使えるまで環境設定できる自信がない。 ということです。 そのため、普通のポインタを使って実装しようと思うのですが、 そして上記のような問題が出てくるにつれ自分の中では 次のような疑問点が出てきました。 ●質問(1) ・なんで参照型を格納できるコンテナがないのよ!  本当はあったりするんだけども、自分が知らないだけ? ●質問(2) ・関数間でオブジェクトを渡すときには、パフォーマンスとかも  考慮してもconstキーワードを使いつつの参照渡しがよい。と  Effective C++か何かで読んだのですが、コンテナに格納する  場合にはこれは有効ではないのか?  また、オブジェクトは、基本的には、やたらめったら  コピーするものではなく、一つオブジェクト用のメモリ領域を  作ったらそれを流用(ポインタ・参照を使って参照する)した方が、  作り的にきれいな気がするのですが、なにか方針とかあったりする  のでしょうか? 以上長くなってしまいましたが、よろしくお願いいたします。

  • html5とc#について

    スマホ向けのゲームやアプリ開発をしたいのですが、開発言語となるhtml5とc#の違いを教えていただけ無いでしょうか?html5は簡単なもの、c#には高度なものを担当させるのでしょうか? 今まで、特にプログラミングの経験はありません。

  • C言語で使うことの出来る配列のLIB

    C言語から使うことの出来るSTLのコンテナクラスのようなものはありますでしょうか? 配列の追加、削除、検索、更新を高速で処理したいので(LIST構造)、汎用的に使えるLIBのようなものがあれば教えていただきたいです。

  • C言語のゲームのプログラミングの本教えてください

    自分は現在高専の情報系の二年生です。 自分は将来はゲームのプログラマーになりたいと考えています。 そこで今から少しずつゲームのプログラミングについて学んでいこうと考えています。 色々な会社の採用情報をみると「C言語やアセンブラなどでのゲームのプログラミング経験があるといいです」みたいに書いていることがあります。 なのでせめてC言語のゲームのプログラミングの本を読んで学んでいきたいと考えています。 そこでおすすめの本があると言う方は教えてください。

  • C++でのSORT

    受験番号(int型)と成績(int型)からなる表(可変長)を成績順に並び替えるsortを例えばSTLを使って実現したいと思います。 そこで、構造体をvectorコンテナにのせることを考えました。ですが、push_backの扱い方が間違っているようです。STLのSORTを使う知識以前に、複数要素を持つコンテナが作れません。 受験番号  成績 1     65 2     92 3     95 を 受験番号  成績 3     95 2     92 1     65 に並び替える。 #include <vector> #include <algorithm> struct goukakusya { int number; int score; }; main() { vector<goukakusya> table1; table1.number.push_back(1); table1.core.push_back(65); table1.number.push_back(2); table1.core.push_back(92); table1.number.push_back(3); table1.core.push_back(95); } よろしく、御願いします。

  • CとC++をスクールで習おうと思うのですが。

    CとC++をスクールで習おうと思うのですが。 私は現在勤め先でデザイナーをしておりまして、アプリを作るのでプログラマーと一緒に仕事をしています。 しかし最近、デザイナーもプログラミングの習得が必要だと感じてきました。 といってもプログラミングが全く未経験なわけではありません。 初級ですが、以下の言語を使って簡単なツールを作った経験があります。 c、c#、javascript、vba(excel)、php、html、perl、独自言語、など ・excel上で外部ファイルを読み込んで様々な解析を行なうツール(vba) ・Web上で外部データや他のサイトからデータを収集して解析し、それをWebで結果を表示(php、js、perl、html) ・windows上で動く特殊な計算機(c#) ・CGツール(コンピュータグラフィック)上で動作する独自言語 こういう経験があるのですが、function関数を作ってファイルを読み書きして超初歩的なGUIを作れる程度のことしかできないんです。 私に足りないのは、「クラスって何?」「ポインタって?」「メモリ管理なんてしかことない」「リソースってどういうこと?」。 これらが仕事上で使わないので全然使い方がわからないのです。 しかしプログラマーと会議するときにこういう話が出てきて、理解できていないのでなんとかしなくてはなりません。 あと、VisualStudioを使ってみたことはあるのですが、いろいろなファイルが最初からあってこれらの意味もわかりません。 私は多少使ったことがある言語は習ったわけではなく本で勉強しながら覚えたので、プログラミングの基本が全くわかっていないようなのです。 こういうときにスクールに通うのは有効でしょうか? 都内なのでKen Schoolとかいいのかなあと思っているのですがどうでしょうか?

  • 制御系ってSTL必要なんですか?

    私は、制御系・組み込み系の業務経験がありません。 UNIX C, Java, C#の経験があります。 最近、J2SE 5.0やC# 2.0などで、 「ジェネリック」という概念がでてきました。 C++のSTLがとても似ているように思えました。 自分の認識では、C++は今後、制御系などの分野 ぐらいしか用途がないように思っているのですが・・・ 制御系のC++でも、STLはバリバリ使うのでしょうか? それとも、制御系や組み込み系では、すべての ロジックが自作オンリーで、そのような汎用的な 車輪を使うことは不可能な世界なのでしょうか? この質問を至った経緯を以下に書きます。 1)Java 5.0, C# 2.0のジェネリックの概念を  学習するにあたって、C++のSTLを同時に学習した  ほうが、効果的ではないかとおもった。 2)Java, C#でプログラムを組む以上。C++の存在価値が  制御系・組み込み系への準備という位置づけでしか  見出せなかった 3)しかし、コレクションクラスなどを使った。  Java, C#の開発になれているため、すべてのロジック  をゴリゴリ書く開発に戻りたくないので、  C++なら、STLを使いたいと思った。  そして、それは(1)の目的を果たす意味で  重要だと感じた。 4)しかし、私は制御系、組み込み系の経験がないので、  C++でSTLというやりかたがその分野で通用するのか  わからなかった。  いくら、(1)の目的で勉強になるからといって、  学生がPascalを勉強するような、実務に  あまり関係のないことをやりたいとはおもわなかった  ので、制御系、組み込み系でC++でSTLという  組み合わせが現実的に有りえるのかどうかを  制御系バリバリの方にいろいろ聞いてみたいと感じた。 以上がこの質問をした経緯です。 よろしくおねがいいたします。

  • STLでコンテナにコンテナを格納

    STLを用いてコンテナにコンテナを格納する事は出来るのでしょうか。 vectorにvectorを格納したり、listにvectorを格納したりといったニーズは普通にあると思うのですがいかがでしょう。

専門家に質問してみよう