私はC++プログラムのコンパイルにg ++を使用していますが、int型とdooble型の間の暗黙の変換を停止したいとします。 パラメータとしてdoubleを使用する関数があります。この関数のパラメータにintを渡します。コンパイルはエラーや警告なしに渡されます。g ++コンパイラと暗黙の変換
これは私の質問ですので、どのように暗黙の変換を停止するのですか?
ありがとうございました。
私はC++プログラムのコンパイルにg ++を使用していますが、int型とdooble型の間の暗黙の変換を停止したいとします。 パラメータとしてdoubleを使用する関数があります。この関数のパラメータにintを渡します。コンパイルはエラーや警告なしに渡されます。g ++コンパイラと暗黙の変換
これは私の質問ですので、どのように暗黙の変換を停止するのですか?
ありがとうございました。
あなたはこの試みることができる:私はマーティンの答えが進むべき道だと思います
#include <iostream>
template<typename T>
void func(T t);
void func(double d)
{
std::cout << "D:" << d << "\n";
}
int main()
{
func(2.3); // OK
func(2); // Fails at compile time.
}
ありがとう、私はこの方法を試して、それは動作しますが、私は私のメイクファイルで-Werror = conversionフラグを使用すると思います。それはもっと簡単で仕事をしました。 – CHAKRI
微妙な違い:リンク時には失敗し、コンパイル時には失敗します。 – GingerPlusPlus
を。 リンク時に変換が見つかります。このことができます
template<typename T>
void func(T) {
//static_assert(sizeof(T) == 0, "..."); // if you can use static_assert
int a[ (sizeof(T) == 0) ? 1 : -1 ];
}
希望:あなたはコンパイル時に見つける必要がある場合は 、あなたはstatic_assert
または 関数テンプレートと同様のものを追加することができます。
これは言語の一部です。 –
[C++の暗黙的なプリミティブ変換に関する警告またはエラー]の重複が可能です。(http://stackoverflow.com/questions/4477139/warnings-or-errors-for-c-implicit-conversion-of-primitives) –