5

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 ?
}
4

4 に答える 4

10

デフォルトのコンストラクターを使用して、変数を「クリア」できます。

template<class T>
void clear(T &v)
{
    v = T();
}

これは、デフォルトのコンストラクターと代入演算子を持つすべてのプリミティブ型、ポインター、および型に対して機能します(そうしないように指示されない限り、またはそれらが保護/プライベートにされない限り、すべてのクラスがデフォルトで持っています)。

于 2012-08-10T12:56:08.587 に答える
2

x = {};T t = {};は/に対応する自然な割り当てT t {}であり、それ自体が初期化された変数を取得する自然な方法です。

于 2012-08-10T18:31:54.810 に答える
0

クラスをゼロに初期化することは、演算子= 0;を定義していない限り、一部のクラスでは意味がない場合があります。=

ポインタと単純型のみを呼び出した場合は、機能する可能性があります(、、、、のみT)。intdoublemyClass*myClassB*

于 2012-08-10T12:51:04.233 に答える