C++ 11 では、算術型とクラス型の値をゼロに初期化する方法はありますか (算術型の実行時にオーバーヘッドはまったくありません)。
template<typename T> void myFunction(T& x)
{
x = 0; // How to make this works for T = double but also for T = std::string ?
}
C++ 11 では、算術型とクラス型の値をゼロに初期化する方法はありますか (算術型の実行時にオーバーヘッドはまったくありません)。
template<typename T> void myFunction(T& x)
{
x = 0; // How to make this works for T = double but also for T = std::string ?
}
デフォルトのコンストラクターを使用して、変数を「クリア」できます。
template<class T>
void clear(T &v)
{
v = T();
}
これは、デフォルトのコンストラクターと代入演算子を持つすべてのプリミティブ型、ポインター、および型に対して機能します(そうしないように指示されない限り、またはそれらが保護/プライベートにされない限り、すべてのクラスがデフォルトで持っています)。
x = {};
T t = {};
は/に対応する自然な割り当てT t {}
であり、それ自体が初期化された変数を取得する自然な方法です。
クラスをゼロに初期化することは、演算子= 0;
を定義していない限り、一部のクラスでは意味がない場合があります。=
ポインタと単純型のみを呼び出した場合は、機能する可能性があります(、、、、のみT
)。int
double
myClass*
myClassB*