MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C++の基礎 - usingのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C++の基礎 - using
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == ここでは、std::coutやstd::string等の省略記法(cout, string)を、using namespace std;を用いずに個別に利用可能にする方法を記載する。<br> 型指定が可能なstd::vectorやstd::map等のテンプレートクラスも個別に宣言できる。<br> <br> ちなみに、usingディレクティブを用いてusing namespace std;と記述すれば、std名前空間の全てのメンバの省略記法が一括で利用可能になるが、<br> 若干危険であるため(参考 : [http://marycore.jp/prog/cpp/de-using-namespace-std/ usingディレクティブ|using namespace std; の危険性と注意点・代替案])、個別に宣言する方法を推奨する。<br> <br><br> == using宣言 == using宣言(using declaration)によって、特定のメンバのみを取り込むことができる。<br> クラススコープ以外の一般的なスコープで宣言が可能である。<br> <syntaxhighlight lang="c++"> using std::cout; using std::endl; // 以前の記述方法 std::cout << 123 << std::endl; // 新しい記述方法 cout << 123 << endl; </syntaxhighlight> <br> 関数の場合も同じ記法を用いる。<br> <syntaxhighlight lang="c++"> using std::max; using std::sort; using std::move; </syntaxhighlight> <br> std::stringクラスの場合も変数の時と同様の記法が使用できる。<br> <syntaxhighlight lang="c++"> using std::string; string strhoge = "abcde"; </syntaxhighlight> <br><br> == エイリアス宣言 == std::vector<std::string>等のテンプレートクラスの場合には、エイリアス宣言(alias declaration)による別名での宣言が必要となる。<br> <syntaxhighlight lang="c++"> using String = std::string; using strings = std::vector<std::string>; strings strvec = {"A", String("B")}; </syntaxhighlight> <br><br> == エイリアステンプレート == エイリアステンプレート(alias templates)により、型指定が必要なテンプレートクラス(std::array<T>やunique_ptr<T>等)を別名で定義することもできる。<br> <syntaxhighlight lang="c++"> template<typename T> using vector = std::vector<T>; vector<int> v = {1, 2, 3}; </syntaxhighlight> <br><br> == usingの活用方法 == これらのusing宣言 / エイリアス宣言 / エイリアステンプレートによる個別の宣言と定義をどのタイミングで行うべきか、<br> using namespace std;の代替として使用するのであれば、ファイルスコープへの汚染を慎重に考慮した上で、<br> 従来通り、main関数の外や実装ファイルの冒頭で利用するのもよい。<br> <br> ただし、最も推奨するのは、必要になった時に局所的に定義する方法である。頻繁に使用しないクラスではこちらの方法がベストである。<br> <syntaxhighlight lang="c++"> namespace mylib { // 名前空間で個別に宣言(mylib内限定で利用可能) using std::cout; void test() { // 関数内で個別に宣言 using std::endl; cout << 1 << endl; cout << 2 << endl; } struct String { // クラス内で個別に定義 using string = std::string; string _str; String(const char* str) : _str(str) {} void print() { cout << _str << std::endl; } }; // 下記に示す無名の名前空間の場合、同一の名前空間に汚染するので注意する namespace { using std::endl; } // 侵食したendlが使えてしまう void hazard() { std::cout << endl; } } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:C++]]
C++の基礎 - using
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse