Last update 4 Jun. 2004

C++プログラミングメモ



localeを日本語にする

std::locale::global(std::locale("japanese"))でlocaleを日本語に設定できる。

localeのサンプル

#include <iostream>
#include <locale>
using namespace std;

int main()
{
  locale::global(locale("japanese"));
  wstring str1_jp = L"Hello!";
  wstring str2_jp = L"こんにちは";
  wcout << str1_jp << L": " << str1_jp.length() << endl;
  wcout << str2_jp << L": " << str2_jp.length() << endl;

  locale::global(locale("english"));
  wstring str1_en = L"Hello!";
  wstring str2_en = L"こんにちは";
  wcout << str1_en << L": " << str1_en.length() << endl;
  wcout << str2_en << L": " << str2_en.length() << endl;

  return 0;
}


Hello!: 6
こんにちは: 5
Hello!: 6

streamのフォーマットを変更する

std::coutなどのstreamにおけるフォーマットを変更する。iomanipをインクルードする。

streamフォーマット変更

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
  const double a = 3.4;
  const double b = 6.5;
  ios_base::fmtflags flag;

  cout << pow(a, b) << endl;

  flag = cout.setf(ios_base::fixed);
  cout << setw(12) << setprecision(3) << pow(a, b) << endl;
  cout.unsetf(‾flag);

  flag = cout.setf(ios_base::scientific);
  cout << setw(15) << setprecision(5) << pow(a, b) << endl;
  cout.unsetf(‾flag);

  return 0;
}


2848.48
    2848.479
   2.84848e+003

コンテナの初期値を設定する

mapコンテナなどの初期値を、ヘッダファイルなどの関数の外側に設定する。

コンテナの初期値の設定

#include <iostream>
#include <string>
#include <map>
using namespace std;

typedef map<int, string>::value_type num_str_t;
static num_str_t defaults[] = {
  num_str_t(10, "ten"),
  num_str_t(20, "twenty"),
  num_str_t(30, "thirty")
};
const int defaults_size = sizeof defaults / sizeof *defaults;
static map<int, string> map_num_str(defaults, defaults + defaults_size);

int main()
{
  for (map<int, string>::iterator iter = map_num_str.begin();
    iter != map_num_str.end(); ++iter)
    cout << iter->first << ", " << iter->second << endl;

  return 0;
}


10, ten
20, twenty
30, thirty

C/C++におけるmain関数あれこれ

以下のプログラムが文法的に正しいか、正しくないか。CとC++ではいくつかの点において異なるので注意が必要。詳細については規格を参照のこと。

ここでは、C++の規格としてISO/IEC 14882:1998、Cの規格としてISO/IEC 9899:1990 (C89)を適用している。より新しいCの規格であるISO/IEC 9899:1999 (C99)では、関数宣言時の暗黙の型が廃止されたりと、C89と一部異なるので注意すること。


int main()
{
  return 0;
}

C: 正しい / C++: 正しい



void main()
{
}

C: 正しくない(実装依存) / C++: 正しくない(実装依存)



int main()
{
}

C: 正しい(戻り値は不定) / C++: 正しい(戻り値は0となる)



main()
{
  return 0;
}

C: 正しい(省略された戻り値の型はintとなる) / C++: 正しくない(戻り値の型を宣言する必要がある)


因みに、main関数以外の関数については以下の通り。


int func()
{
}

C: 正しい(戻り値は不定) / C++: 正しくない(returnによる戻り値が必要)



Copyright (C) Noriyuki Futatsugi/Foota Software, Japan.
All rights reserved.
d2VibWFzdGVyQGZ1dGF0c3VnaS5uZXQ=