C++

std::partial_sort_copy は入力側のシーケンスを変更しない

C++

試した環境 Windows 10 Microsoft Visual Studio Community 2019 Version 16.10.2 本題 std::partial_sort_copy は範囲を部分的にソートした結果を他の範囲にコピーする処理を行います。 標準ライブラリの他のソート処理 (std::sort や std::partial_sort な…

Visual Studio では OpenMP のビルドフラグを付けなくても OpenMP の API を使用できる

C++

試した環境 Windows 10 Microsoft Visual Studio Community 2019 Version 16.8.6 cmake 3.20.1 g++ 9.3.0 本題 Visual Studio では OpenMP で並列化をする際にはビルドフラグ/openmpが必要ですが、omp_get_num_thread()などの OpenMP の API はこのビルドフ…

GLM の vec 系の変数で GLSL の .xyz みたいな指定方法(swizzle)をできるようにする

C++

試した環境 glm 9.9.7 Microsoft Visual Studio Community 2019 Version 16.4.5 本題 vector.xyzwのようなドット演算子の後に指定したい要素を順に並べる表現方法を swizzle または Swizzling と呼ぶそうです。 この swizzle 表現は GLSL ではデフォルトでで…

new 演算子で確保した複数の変数を1つの delete 演算子とコンマでまとめて解放できない

C++

試した環境 Microsoft Visual Studio Community 2019 Version 16.4.5 本題 以下のコードのように new 演算子で確保した複数の変数を1つの delete 演算子とコンマ演算子でまとめて解放することは出来ません。 #include <iostream> int main(int argc, char* argv[]) { i</iostream>…

参照先が生きていてもポインタ変数自体がラムダ式より先に寿命が来る場合はそのポインタ変数を参照キャプチャしない方がいい【C++】

C++

試した環境 Microsoft Visual Studio Community 2019 Version 16.4.5 本題 最近私がやらかしたミスを書き残します。 #include <functional> #include <iostream> class MyCallee { public: MyCallee() : counter_(0) {} int countUp() { return ++counter_; } private: int counter</iostream></functional>…

32bit整数型で扱える範囲より大きい値を扱うときは明示的に64bit整数型を指定する【C++】

C++

タイトルが当たり前ですが、つまりこういうことです。 以下に例を示します。 int main() { std::cout << "(NG) 4000^3 = " << 4000 * 4000 * 4000 << std::endl; std::cout << "(OK) 4000^3 = " << 4000LL * 4000 * 4000 << std::endl; } (NG) 4000^3 = -424…

std::thread で純粋仮想関数を指定する

C++

確認した環境 Windows10 Visual Studio Community 2019 Version 16.2.5 本題 前回の記事で std::thread にメンバー関数を渡すときについて書きましたが、 純粋仮想関数の場合を確認していなかったので今回確認します。 コードは以下の通りです。 class BaseC…

std::thread で実行するメンバ関数が static かそうでないかでの書き方の違い

C++

確認した環境 Windows10 Visual Studio Community 2019 Version 16.2.5 本題 std::thread の1番目の引数にクラスのメンバ関数を渡すとき、 そのメンバ関数が static かそうでないかで書き方が異なります。 static でないメンバ関数では2番目の引数に this を…

デフォルトムーブコンストラクタでムーブした時の基本型メンバ変数の挙動を確認する【C++】

C++

確認した環境 Windows10 Visual Studio Community 2019 Version 16.2.5 本題 C++ のムーブコンストラクタはデフォルトが用意されていますが、 int などの基本型がどのようになるのかを実際に動かして確認しました。 ムーブコンストラクタがちゃんと呼ばれて…

OpenMP にて使用するスレッド数を指定する2つの方法とその違い

C++

確認した環境 Windows10 Visual Studio Community 2015 Update 3 CPU Intel(R) Core(TM) i7-4790 コア数4、論理プロセッサ数8 使用するスレッド数を指定する2つの方法 forループ内の処理を並列で処理したい場合、 OpenMP が有効になっていれば#pragma omp pa…

符号付き整数の負の値を符号なし整数にキャストした時の値

C++

気になったので Wandbox で調べました。 int main() { int32_t s = -1; uint32_t u = static_cast<uint32_t>(s); std::cout << u << std::endl; // 4294967295 } int main() { int32_t s = -2; uint32_t u = static_cast<uint32_t>(s); std::cout << u << std::endl; // 42949672</uint32_t></uint32_t>…

Draco の status.h より先に windows.h を include するとエラーになる

C++

環境 Microsoft Visual C++ 2015 Draco 1.3.5 本題 Draco の status.h には、ERRORという列挙子が定義されています。 一方、windows.h 内で include している wingdi.h には、以下のようにERRORが define されています。 #define ERROR 0 そのため、 status.…

reinterpret_cast は参照に対しても使用できる【C++】

C++

reinterpret_cast はポインタの型変換を行うという説明をよく目にします。 しかし、それだけではなく参照のキャストも行えるということをメモしておきます。 コード #include <iostream> struct Point { int x; int y; }; struct Size { int width; int height; int ar</iostream>…

vcpkg のvulkan パッケージからVulkan SDK をインストールできるわけでは無い

C++

環境 Windows 10 vcpkg 2018.11.23-nohash 本題 Vulkan プログラミングの環境を構築しようと構築手順を説明している記事を読んでいると、 Vulkan SDK を以下のページからダウンロードしてインストールするように書いてあります。 https://vulkan.lunarg.com/…

vcpkg でzlib のビルドに失敗する現象とその解決策

C++

環境 Windows 10 Microsoft Visual Studio Community 2015 Update 3 vcpkg 2018.11.23-nohash 現象 私の環境では、vcpkg によるzlib のビルドが上手くいきませんでした。 コンソールの出力は以下のものでした。 $ vcpkg install zlib:x64-windows The follow…

Visual C++ 2015 でオブジェクトを値返しした時の挙動について

C++

オブジェクトを値返ししたときの挙動について気になることを調べました。 特に、コンストラクタの呼び出し回数やコピーコンストラクタとムーブコンストラクタのどちらが呼ばれるのかについて調べました。 環境 Microsoft Visual Studio Community 2015 Updat…