C++で暗黙的な変換が使用される条件を理解するのに問題があります。私がクラスを持っているとします:標準オペレータへのオペランドのC++暗黙的な変換
class SomeClass
{
private:
int val;
public:
SomeClass(int i) :val{ i } {}
operator string() { return to_string(val); }
};
私は文字列にキャストする必要があるのはなぜですか?なぜ変換を暗黙的に実行しないのですか?
コード:ちょうどキャストを使用したとして
int main(void)
{
SomeClass sc = 4;
cout << (string)sc << endl; //prints 4, compiles fine
cout << sc << endl;//does not compile, no operator "<<" matches these operands
string str1 = sc;//compiles fine, performs cast
string str2 = "Base String" + sc;//does not compile, no operator "+" matches these operands
}
この質問は実用よりも学術的であるが、とにかく、より読みやすいです。
それで、C++の標準ライブラリ関数(キャストなし)との互換性を高めるために、stringではなく 'basic_string'への暗黙の変換を記述する必要がありますか? –
@ApoorvaKharcheいいえ、 'string'は' basic_string'の特定のインスタンス化のtypedefです。 'operator <<がbasic_stringで書かれているのか' string'で書かれているのかは、まったく同じことを意味するので違いはありません。 'operator'が' basic_string 'や' basic_string 'のように' T 'を推論するかどうかは違いがあり、あなた自身のクラスからはそれを制御できません。 –
hvd