私はそのテンプレートを読んでいますcopy-conはデフォルトのcopy onstructorではなく、template assignment-opは決してコピー代入演算子ではありません。テンプレートクラスのコンストラクタをコピーします
なぜこの制限が必要なのかわかりませんでした。すぐにideoneにオンラインになり、test programを返しましたが、ここでコピーコンストラクタが呼び出されることはありません。私はtemplatizedコンストラクタを見つけました。 。
#include <iostream>
using namespace std;
template <typename T> class tt
{
public :
tt()
{
std::cout << std::endl << " CONSTRUCTOR" << std::endl;
}
template <typename U> const tt<T>& operator=(const tt<U>& that){std::cout << std::endl << " OPERATOR" << std::endl;}
template <typename U> tt(const tt<U>& that)
{
std::cout << std::endl << " COPY CONSTRUCTOR" << std::endl;
}
};
tt<int> test(void)
{
std::cout << std::endl << " INSIDE " << std::endl; tt<int> a; return a;
}
int main() {
// your code goes here
tt<int> a ; a = test();
return 0;
}
この制限の背後にある理由とテンプレートクラスのコピーコンストラクタを書く方法についての説明がありますか?
おかげ
[コピー - 抽出](http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) – 0x499602D2
「デフォルトのコピーコンストラクタ」はありません。 *コピーコンストラクタは1つしかありません。テンプレートは決してそれではありません。 –
コードを編集してideoneで実行しましたが、まだコピーコンストラクタが呼び出されません。しかし、私はこの制限の背後にある理由を理解することもできません – anonymous