unsigned long int のような特定の組み込み型への暗黙的なキャストを可能にするクラスを作成しようとしていますが、これを可能な限り正しく実行しようとしているため (これは C++ での最初の重要なプロジェクトです)、奇妙な結果になりました。 const の正確性に関する問題:
これは機能します:
#include <iostream>
class CustomizedInt
{
private:
int data;
public:
CustomizedInt();
CustomizedInt(int input);
operator unsigned long int () const
{
unsigned long int output;
output = (unsigned long int)data;
return output;
}
};
CustomizedInt::CustomizedInt()
{
this->data = 0;
}
CustomizedInt::CustomizedInt(int input)
{
this->data = input;
}
int main()
{
CustomizedInt x;
unsigned long int y = x;
std::cout << y << std::endl;
return 0;
}
でもこれは:
#include <iostream>
class CustomizedInt
{
private:
int data;
public:
CustomizedInt();
CustomizedInt(int input);
operator unsigned long int () const;
};
CustomizedInt::CustomizedInt()
{
this->data = 0;
}
CustomizedInt::CustomizedInt(int input)
{
this->data = input;
}
CustomizedInt::operator unsigned long()
{
unsigned long int output;
output = (unsigned long int)data;
return output;
}
int main()
{
CustomizedInt x;
unsigned long int y = x;
std::cout << y << std::endl;
return 0;
}
Visual Studio 2010 で次のエラーが表示されます。error C2511: 'CustomizedInt::operator unsigned long(void)' : overloaded member function not found in 'CustomizedInt'
ここで、キーワード const を演算子の定義から削除すると、すべて問題ありません。これはバグですか?現在のオブジェクトを変更しないことを明確に述べるために、各(パブリック)メソッド/演算子の後に const キーワードを使用することになっていることを読みました。
また、そのような演算子を定義するのは適切ではないことはわかっていますが、関連する注意事項を完全に理解しているかどうかはわかりません。誰かそれらの概要を教えてください。ToUnsignedLongInt というパブリック メソッドを定義する方がよいのでしょうか。