C++

basic_ostream::flush

C++

flushは、バッファをフラッシュする。basic_ostream::flush - cpprefjp C++日本語リファレンスC言語のfflushのトピックのC++版である。 C言語では、'\n'など改行があるとフラッシュされるので、'\n'を出力せずにsleepさせた。 C++でも、std::endlなど改行が…

basic_ostream::write

C++

writeは文字列(またはバイト列)を出力する。basic_ostream::write - cpprefjp C++日本語リファレンスstringオブジェクトのstrに"ABCDE"をセットし、writeの第1引数にはstr.c_str()でC言語形式で文字列を、第2引数にはstr.size()でサイズを渡す。 $ vi basic_…

basic_string::c_str

C++

C++のstring(basic_string)も時には、C言語の関数に渡したり、文字配列として扱う場合が度々あるだろう。 しかし、相手はC言語の仕様で作られている要素のため、そのまま渡すことはできない。basic_string::c_str - cpprefjp C++日本語リファレンスc_strは、…

basic_string::size

C++

stringの正体は、basic_string - cpprefjp C++日本語リファレンスbasic_string&ltchar>であり、さまざまなメンバが定義されている。 sizeは、basic_string::size - cpprefjp C++日本語リファレンス文字列の長さを取得するメンバ関数。str1は後から"ABC"を代…

basic_ostream::put

C++

coutは、標準出力に出力するためのグローバルなostreamオブジェクトである。cout - cpprefjp C++日本語リファレンスで、このostreamはさらに、basic_ostream - cpprefjp C++日本語リファレンスusingで定義されていて、その正体はbasic_ostreamである。 basic…

cout

C++

coutは、出力演算子で標準出力に出力するために指定する標準出力ストリームオブジェクトである。cout - cpprefjp C++日本語リファレンス std::cout, std::wcout - cppreference.comstd::coutは、グローバルオブジェクトなので、グローバルなクラスや構造体の…

ラムダ式

C++

ラムダ式は、軽量な関数オブジェクトを簡易的に定義する方法。 ラムダ式 - cpprefjp C++日本語リファレンス基本的にはxとyの値を足したものを返している関数オブジェクトをaddに格納しているだけ。 キャプチャリストに&があるので、retを中からも外からも使…

constexpr

C++

constexprは、定数式であることを示すキーワード。constexpr - cpprefjp C++日本語リファレンスconstexprは、コンパイル時に評価されるので、factorial(10)の値cはコンパイル時には決定されている。一方で、factorial(10)の値rは実行時に評価される。10の階…

static_assert

C++

C言語のassertは実行時に式を評価するものであった。 C++11のstatic_assertはコンパイル時に式を評価する機能。コンパイル時アサート - cpprefjp C++日本語リファレンスstatic_assert.cppが、 // main関数 int main(){ // 変数の宣言 const int N = 4; // co…

weak_ptr

C++

weak_ptrは、C++11で導入されたスマートポインタの一種で、参照はできるが、リソースの所有権を持つことはできない。weak_ptr - cpprefjp C++日本語リファレンスclass_testの中で、子オブジェクトポインタptr_がshare_ptrの場合に、まず、main.cppで、 // ヘ…

shared_ptr

C++

shared_ptrは、C++11で導入されたスマートポインタの一種で、リソースの所有権は複数のポインタで共有できる。 いくつのポインタから参照されているかを参照カウンタというもので数えていて、どれからも参照されていないとき、リソースが解放される。shared_…

unique_ptr

C++

unique_ptrは、C++11で導入されたスマートポインタの一種で、とあるunique_ptrが指すリソースの所有権は1つのポインタしか持つことができない(現在はそのunique_ptrのみが持つ)という特徴がある。unique_ptr - cpprefjp C++日本語リファレンスtest.hで、test…

ノンタイプテンプレートパラメータ

C++

本来、型を指定するのが、テンプレートのパラメータ部分だが、型以外のモノを指定することもできる。テンプレート仮引数 | Programming Place Plus C++編【言語解説】 第22章array.hで、array_の型はTになっていて、テンプレートパラメータで型を指定する…

decltype

C++

decltypeを使うと、指定された式の型を取得することができる。decltype - cpprefjp C++日本語リファレンスdecltypeで取得した型で変数宣言など、一般の型と同じように使える。前回の、後置戻り値型に使ったり、変数宣言に使ったり、参照も判断できる。 $ vi …

後置戻り値型

C++

C++11から、関数の定義において、戻り値型を引数リストの後に置くことができるようになった。戻り値の型を後置する関数宣言構文 - cpprefjp C++日本語リファレンス簡単な例を示す。このように、本来戻り値型がある場所にはautoを置き、引数リストのあと、"->…

forward

C++

ユニヴァーサル参照の引数を持つ関数内で、その引数を別の関数に渡すときにmoveしてしまうと、ユニヴァーサル参照が左辺値だった場合に困る場合がある。右辺値参照・ムーブセマンティクス - cpprefjp C++日本語リファレンスこのような場合に、forward - cppr…

ムーブ代入演算子

C++

前回、オブジェクトの初期化で右辺値を指定し、ムーブコンストラクタが実行された。 オブジェクトの代入で右辺値を指定された場合は、ムーブ代入演算子が実行される。右辺値参照・ムーブセマンティクス - cpprefjp C++日本語リファレンスprofile.hで、このよ…

ムーブコンストラクタ

C++

引数に右辺値参照を取るコンストラクタ「ムーブコンストラクタ」を定義できる。右辺値参照・ムーブセマンティクス - cpprefjp C++日本語リファレンスprofile.hに、こんな感じでムーブコンストラクタを宣言。profile.cppは、引数のobjのメンバのポインタに挿…

nullptr

C++

C++11からは、ポインタへのNULLのセットは、nullptrを使うことが推奨されている。nullptr - cpprefjp C++日本語リファレンスnullptr.cppで、intとconst char *を引数とするfuncがある。値、指定された文字列をそれぞれ出力するだけ。 // 0とNULLの場合. func…

構造体

C++

C++にも構造体があるが、クラスとの違いで代表的なのは、クラスのデフォルトのメンバアクセスがprivateなのに対し、構造体のデフォルトのメンバアクセスがpublicであること・・・。struct_test.hで、アクセス指定子を付けずにメンバを用意・・・。 (C++では…

ユニヴァーサル参照

C++

std::moveの仕様を見ると、move (utility) - cpprefjp C++日本語リファレンス"T&& t"という引数の型を見ると、右辺値参照っぽいのになぜ左辺値も引数に取れるのか不思議に思う・・・。 実は、テンプレート関数など、T&&での推論が発生する状況においては、右…

move(utility)

C++

代入は、実質的にはオブジェクトのコピーである・・・。 obj = func(); // funcは右辺値なので一時オブジェクトをobjにコピーすることになる. 例えば、上のような場合にobjやfunc()の戻り値がint型ならまだしも、これが大きなクラスオブジェクトのコピーとな…

右辺値参照

C++

C++11では、右辺に置かれる定数リテラルや文字列リテラル、オブジェクトのコンストラクタや関数などは、右辺値と呼ぶ・・・。 一方、左辺に置かれる変数やオブジェクト、ポインタなどは左辺値と呼ぶ・・・。そして、C++03以前では単に「参照」と呼ばれていた…

代入演算子のオーバーロード

C++

コピーコンストラクタの項で、「オブジェクトの代入は、コピーではあるがコピーコンストラクタの対象外で、この場合コピー代入演算子のオーバーロードが必要」ということを書いた・・・。 このオブジェクトの代入の場合も、アドレスのコピーをしないようにコ…

auto

C++

C++11では、型名の代わりにautoを使うことで、初期化時に初期値を基準に型推論して型を決定することができる・・・。で、そのautoの前に、test.hにclass_testを定義・・・。x_というメンバを持ち、値をセットしたり、取得したり、出力したりするだけ・・・。…

auto_ptr

C++

C++には、ガベージコレクションがないので、newで確保したメモリはdeleteで解放しなければならない・・・。 しかし、大きなプログラムになるとdeleteし忘れることもあるだろう・・・。そのような場合に備えて、C++ではスマートポインタなるものがある・・・…

for_each

C++

for_eachは、C++標準ライブラリのSTLアルゴリズムのひとつで、指定されたコレクション(配列やベクタ、リストなど)の各要素ごとに指定された関数オブジェクトを実行するテンプレート関数・・・。for_each - C++ ReferenceSTLにおけるアルゴリズムは、本来のア…

plus

C++

plusは、C++標準ライブラリの標準関数オブジェクトのひとつで、加算を行う関数オブジェクト・・・。plus - C++ Referenceベクターvec1とベクターvec2の要素を足して、その値をベクターvec3に追加、というのを繰り返してみる・・・。C++の標準関数オブジェク…

関数オブジェクト

C++

関数オブジェクトは、括弧付で呼び出すことで、関数の様に振る舞うことができるオブジェクト・・・。 といっても、コンストラクタも括弧付で呼び出す場合があるので、何が違うのかとおもうだろう・・・。 コンストラクタは生成時の最初の1回だが、関数オブジ…

stack

C++

stackは、C++標準ライブラリのSTL(標準テンプレートライブラリ)のひとつで、dequeを特殊化してLIFO(Last In First Out)なスタックとして使うようにしたもの・・・。stack - C++ Referencestackは、追加は先頭からしかできない・・・。取出しも先頭からしかで…