はてぶ・Qiita・Zennのトレンド記事を紹介
C++ は元々「クラス付きのC言語」として開発されたのですが、C 言語はほぼそのまま C++ に含まれています。でも実際の C に比べると、C++ の中の C は少し使い方や挙動が違っていたりするため、注意しないといけないです。それは置いといて、C++ には何に関しても、C の
今回はプログラミング中に原因が分かるまでかなり時間がかかったバグについて話そうと思います。もちろん色々伏せていますが、まずはファイルを作成して、doSomethingWithFile1() と doSomethingWithFile2() にそのファイルを渡す以下のような関数を
今回は C++17 で導入されたstd::string_viewを紹介しようと思います。名前通り文字列のビューということで、文字列の読み取り専用の型です。使い方としては、例えば以下のように文字列を関数に渡して出力したい時ですね。void printStringView(std:
std::threadを作成する時は、よく以下のようにラムダ式関数を使うことがあります。std::thread t([&] { // 何かをする});簡単な作業を別のスレで行いたい時はかなり便利ですよね。まず以下のようにラムダ式関数を変数にしてから渡してもい
コンストラクタの初期化リストで初期化を完了しよう、とは言うけど・・・
昨日 stackoverflow で面白い C++ の質問を見たので、少し紹介してみます。一昔前の C++ のクラスでよくあるのは、クラスのインスタンスを作ってから、以下のように別で初期化の関数や、オプションなどを設定するような関数を呼ばないといけなかったりします。OldCl
久しぶりにstd::variantを使う機会がありました。std::variantはunionの型安全な C++17版のような、複数の型のうちのいずれか一つを保持できるコンテナです。ユースケースとしては、完全に違う型の値を保存しないといけないですが、事前に型のリストが分かってい
C++ の名前って「C の後継」ということで「C/C++ のインクリメント演算子で 1 を足している」という賢い名前になっていますが、実はインクリメント演算子には前置と後置という2つのタイプがあります。int x;++x; // 前置インクリメントx++; // 後置インク
今回はc++の機能紹介からは少し離れて、プログラミングの命名規則について書こうと思います。高校の時のコンピューターサイエンスの教師は体育の担当もやっていて、プログラミングはまだ初心者だったせいで、彼の授業は正直あんまり参考にならなくて、内容は殆ど覚えていないのですが、今でも記憶
海外のプログラマーはみんな使っているであろうサイトstackoverflow.comってご存じですか?プログラミングで何か分からないことがあったら、みんな真っ先にstackoverflowで聞くので、プログラミングの簡単な問題の9割ぐらいはstackoverflowでの検索で解決
色々伏せて簡略化しているのですが、先日以下のようなコードを見かけました。std::map<int, std::string> data{{1, "name1"}, {2, "name2"}};const int key = 2;if (data.find(ke
std::vector、std::set、std::mapのようなコンテナ型にある要素が入っているかをチェックしたい時は、どういうコードを使いますか?一番王道でC++っぽいアプローチはやはりforループで、実際に未だに一番よく見かけます。範囲ベースの forループを使えば、以
std::vectorの要素のうち特定の条件に合致するものを削除する
C++ でstd::vectorのようなコンテナから特定の条件を果たす要素を削除したい場合はどうしますか?例えば、数字が入っているstd::vectorからすべての偶数の要素を削除したい時はどうしますか?まずはforループを使うと思います。std::vector<in
数日前にダブルポインタ(ダブル型のポインタではなく、ポインタのポインタ)はダブルNULLチェックしないといけないのかって聞かれました。考えてみると確かにダブルポインタなので、以下のようにアクセスする前にどちらもNULLチェックしないといけないです。void do_somethi
最近見ているコードは、殆どの関数が戻り値のエラーコードと出力引数の両方を返すようになっているせいでかなり使いづらいです。以下のような単純な関数でも呼ぶ時は出力引数のせいで一行で呼べないです。int get_name (std::string& name){ i
今回はC++の「0/3/5のルール」について書こうと思います。このルールはクラスを書く時に、以下の要素のどれかを定義するか?を、セットで考えることをお勧するものです。デストラクタコピーコンストラクタコピー代入演算子ムーブコンストラクタムーブ代入演算子なお、普通のコ
最近見ているコードでusing namespace std;をたくさん見かけます。C++ 標準ライブラリのクラスや関数を毎回std::を書かずに使えるというメリットがあるため、使いたくなるのは分かりますが、以下のようなデメリットもあります。コードが読みづらくなります。名前空間