Sun Studio 12 Update 1: C++ ユーザーズガイド

12.4 クラスライブラリの使用

一般に、クラスライブラリを使用するには 2 つの手順が必要です。

  1. ソースコードに適切なヘッダーをインクルードする。

  2. プログラムをオブジェクトライブラリとリンクする。

12.4.1 iostream ライブラリ

C++ コンパイラには、2 通りの iostream が実装されています。

すでに C++ のソースがある場合、そのコードは従来の iostream を使用しており、次の例のような形式になっていると思われます。


// file prog1.cc
#include <iostream.h>

int main() {
    cout << "Hello, world!" << endl;
    return 0;
}

次のコマンドは、互換性モードで prog1.cc をコンパイル、リンクして、prog1 という実行可能なプログラムを生成します。従来の iostream ライブラリは、互換性モードのときにデフォルトでリンクされる libC ライブラリに含まれています。


example% CC -compat prog1.cc -o prog1

次の例では、標準 iostream が使用されています。


// file prog2.cc
#include <iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}

次のコマンドは、prog2.cc をコンパイル、リンクして、prog2 という実行可能なプログラムを生成します。コンパイルは標準モードで行われ、このモードでは、標準の iostream ライブラリを含む libCstd がデフォルトでリンクされます。


example% CC prog2.cc -o prog2

libCstd についての詳細は、「警告:」を参照してください。libiostream の詳細は、「13.3.1 再配布とサポートされる STLport ライブラリ」を参照してください。

コンパイルモードの詳しい説明については、『C++ 移行ガイド』を参照してください。

12.4.2 complex ライブラリ

標準ライブラリには、C++ 4.2 コンパイラに付属していた complex ライブラリに似た、テンプレート化された complex ライブラリがあります。標準モードでコンパイルする場合は、<complex.h> ではなく、<complex> を使用する必要があります。互換性モードで <complex> を使用することはできません。

互換性モードでは、リンク時に complex ライブラリを明示的に指定しなければなりません。標準モードでは、complex ライブラリは libCstd に含まれており、デフォルトでリンクされます。

標準モード用の complex.h ヘッダーはありません。C++ 4.2 では、「complex」 はクラス名ですが、標準 C++ では「complex」はテンプレート名です。したがって、旧式のコードを変更せずに動作できるようにする typedef を使用することはできません。このため、複素数を使用する、4.2 用のコードで標準ライブラリを使用するには、多少の編集が必要になります。たとえば、次のコードは 4.2 用に作成されたものであり、互換性モードでコンパイルされます。


// file ex1.cc (compatibility mode)
#include <iostream.h>
#include <complex.h>

int main()
{
    complex x(3,3), y(4,4);
    complex z = x * y;
    cout << "x=" << x << ", y=" << y << ", z=" << z << endl;
}

次の例では、ex1.cc を互換モードでコンパイル、リンクし、生成されたプログラムを実行しています。


example% CC -compat ex1.cc -library=complex
example% a.out
x=(3, 3), y=(4, 4), z=(0, 24)

次は、標準モードでコンパイルされるように ex2.cc と書き直された ex1.cc です。


// file ex2.cc (ex1.cc rewritten for standard mode)
#include <iostream>
#include <complex>
using std::complex;

int main()
{
     complex<double> x(3,3), y(4,4);
     complex<double> z = x * y;
     std::cout << "x=" << x << ", y=" << y << ", z=" << z <<
       std::endl;
}

次の例では、書き直された ex2.cc をコンパイル、リンクして、生成されたプログラムを実行しています。


% CC ex2.cc
% a.out
x=(3,3), y=(4,4), z=(0,24)

複素数演算ライブラリの使用方法についての詳細は、表 14–4 を参照してください。

12.4.3 C++ ライブラリのリンク

次の表は、C++ ライブラリにリンクするためのコンパイラオプションをまとめています。詳細は、「A.2.50 -library=l[ ,l...]」を参照してください。

表 12–2 C++ ライブラリにリンクするためのコンパイラオプション

ライブラリ 

コンパイルモード 

オプション  

従来の iostream

-compat=4

-compat=5

不要 

-library=iostream

complex

-compat=4

-compat=5

-library=complex

不要 

Tools.h++ Version 7

-compat=4

-compat=5

-library=rwtools7

-library=rwtools7,iostream

-library=rwtools7_std

デバッグ対応 Tools.h++ Version 7

-compat=4

-compat=5

-library=rwtools7_dbg

-library=rwtools7_dbg,iostream

-library=rwtools7_std_dbg

ガベージコレクション

-compat=4

-compat=5

-library=gc

-library=gc

STLport Version 4 

-compat=5

-library=stlport4

STLport Version 4 デバッグ 

-compat=5

-library=stlport4_dbg