9
これは部分的にthisからインスピレーションを受けています。私はコードを書くとき:オペレータとの暗黙の変換
void test(std::string inp)
{
std::cout << inp << std::endl;
}
int main(void)
{
test("test");
return 0;
}
"test"
を暗黙的にstd::string
にconst char*
から変換され、私が期待される出力を取得しています。しかし、私はこのしようとすると:
std::string operator*(int lhs, std::string rhs)
{
std::string result = "";
for(int i = 0; i < lhs; i++)
{
result += rhs;
}
return result;
}
int main(void)
{
std::string test = 5 * "a";
return 0;
}
を私はコンパイラエラーを取得し、invalid operands of types 'int' and 'const char [2]' to binary 'operator*'
。 "a"
は暗黙的にstd::string
に変換されず、代わりにconst char*
のままでした。なぜコンパイラは、関数呼び出しの場合には暗黙的な変換の必要性を判断できますが、演算子の場合は判断できません。
通常、「完全性のために第5項を追加」と言います。 50ページは過度に見える。 – user4581301
実際、暗黙的な変換は、非プリミティブ型に対して予期されるように機能します。 [ここ](http://ideone.com/K4K2vS)を参照してください。 –