次のコードを検討してください。コンパイラは、それぞれ異なるパラメータを持つ、またはただ1つの、operations()の4つの関数を生成するでしょうか?コンパイラはrefパラメータの新しいテンプレート関数をインスタンス化しますか?
class MyClass
{
public:
void foo() const {}
};
template<typename T>
void operate(T obj)
{
obj.foo();
}
int main(int argc, char* argv[])
{
MyClass obj;
MyClass& refObj = obj;
const MyClass& constRefObj = obj;
const MyClass constObj = obj;
operate(obj);
operate(refObj);
operate(constRefObj);
operate(constObj);
return 0;
}
これは実際に使用されているコンパイラに依存します –
このコードは、(T = MyClass'を使って)1つの関数しかインスタンス化しないことに注意してください。 –
@ M.Mコールコンストラクタが呼び出されるたびに呼び出されます。私がpar参照としてobjにconst refを渡したとしても? inconveinient !! –