C++ プログラムのコンパイルに g++ を使用していますが、たとえば int と dooble などの型の間の暗黙的な変換を停止したい: double をパラメーターとして使用する関数がありますが、この関数のパラメーターに int を送信すると、エラーや警告のないコンパイル パス。
それが私の質問です、暗黙の変換を停止する方法は??
ありがとう。
C++ プログラムのコンパイルに g++ を使用していますが、たとえば int と dooble などの型の間の暗黙的な変換を停止したい: double をパラメーターとして使用する関数がありますが、この関数のパラメーターに int を送信すると、エラーや警告のないコンパイル パス。
それが私の質問です、暗黙の変換を停止する方法は??
ありがとう。
あなたはこれを試すことができます:
#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.
}
下位の型から上位の型への暗黙的な変換を避けることはできません。ただし、コンパイラが C++0x をサポートしている場合は、その逆も可能です。
void func(int x){}
int main()
{
func({2.3}); // error: narrowing
}
マーティンの答えは行くべき道だと思います。リンク時に変換を見つけることができます。コンパイル時に見つける必要がある場合はstatic_assert
、関数テンプレートにまたは同様のものを追加できます。
template<typename T>
void func( T ) {
//static_assert( sizeof( T ) == 0, "..." ); // if you can use static_assert
int a[ (sizeof( T ) == 0) ? 1 : -1 ];
}
お役に立てれば。