これは、次のテンプレート関数に関する、この質問のコードに関する無関係な質問です。
template <class T>
class Object : public Container {
public:
T& object;
Object(const T& obj) : object(obj) {}
};
これは、コンストラクターを呼び出すコードです。
template <class T>
void Array::add_element(const T& element)
{
vec.push_back(new Object<T>(element));
}
main
このコードは正常にコンパイルされますが、それを呼び出す行を追加するとすぐに:
Array array;
int i = 3;
array.add_element(i);
コンパイラの警告が表示されます: error: invalid initialization of reference of type 'int&' from expression of type 'const int'
.
それは何についてですか?を渡しましint
た。自動的に に変換されるべきではありconst int&
ませんか? コンパイラが文句を言うのはなぜですか?