SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Modern C++入門

かつての当たり前が通用しない? Modern C++ではやらないこと

第1回 newもdeleteも呼ばないで!

  • X ポスト
  • このエントリーをはてなブックマークに追加

3. データ型は明示しないで!

  • intとかdoubleとかデータ型は明示しないで。
  • autoを使った型推論に任せて。

 C++はC言語から派生したので、静的に型付けを行うプログラミング言語です。C言語をはじめとする、コンパイラ型と呼ばれるプログラミング言語では、たいていは明示的な型付けを要求します。ここで大事なのは、コンパイル時に型が決まるということで、これはすなわち値の格納に必要なメモリ領域の大きさが、コンパイル時に決まらなければならないということです。

 これはC言語でもC++でも同じで、整数型ならint、浮動小数点型ならdouble、ポインタ型ならchar *などと明示するわけです。これは、相手が数値などのプリミティブ型だろうが、構造体のような複合型だろうが、配列であろうが同じです。とにかくサイズがわからなければ話にならん、のです。当たり前の話ですが、コンパイラ型ではコンパイル時にマシンコードを生成するので、値のサイズが分からないとマシンコードも決められない、ということです。

 ちなみにコンパイラ型に対比されるインタプリタ型では、特に型を定めずに値を受け入れることで動的な型付けを可能にしていますが、実行速度の面では不利ですし、融通が利く分バグの要因にもなったりします。

 リスト5では、整数型、浮動小数点型、ポインタ型の変数を宣言し、sizeof演算子でそれぞれのサイズを出力しています。このように、データ型を明示することで、その大きさも自明に決まるのです。

[リスト5]静的な型付けを確認する例(data_type.cpp)
#include <iostream>
using namespace std;

int main()
{
    int i;
    double d;
    char *p;

    cout << sizeof(i) << "," << sizeof(d) << "," << sizeof(p) << "\n";
    return 0;
}

 このような、型の明示が必要な理由としては、データ型の指定と初期化が切り離されているから、ということが挙げられます。つまり、データ型以外に値の大きさを決める要素がないことがあるので、これが必須となったという考え方です。また、言語の設計が古く、コンパイラの性能的にも多くを求められなかったということもあり、決め打ちしてもらった方がわかりやすい、ということになったのでしょう。

 しかしながら、データ型の指定と初期化が切り離されている書き方は、変数の初期化漏れを招いたり、随所で何度も同じデータ型を記述したりと冗長さを招いたりします。Modern C++では、データ型を明示するよりも、データ型を推論できる書き方が推奨されているようです。これもどこかの回で触れられると思います。

次のページ
筆者のC++エピソード

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Modern C++入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/16769 2022/12/01 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング