[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 12/31 01:11 / Filesize : 246 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.59【環境依存OK】



645 名前:デフォルトの名無しさん [2008/04/14(月) 01:32:44 ]
コピーコンスタクタ辺りで質問です。

template <bool M> struct P {
int* _p;

P(int* v=NULL) : _p(v) {}
P(P& v) : _p(v.release()) {} // (1)
~P() { if(M && _p) delete _p; }

void reset(int* v=NULL)
{ if(M && _p && _p != v) delete _p; _p = v; }

int* release()
{ int* temp = _p; _p = NULL; return temp; }
};

P<true> pf(int n) { return P<true>(new int(n)); }

int main() { P<true> a = pf(3); }

上記だと
error: no matching function for call to ‘P<true>::P(P<true>)’
とコンパイルエラーがでます。 しかし (1) を

template <bool _M> P(P<_M>& v) : _p(v.release()) {}

にするとエラーにならずにコンパイルできるようになります。なぜコンパイルエラーがでなくなるのでしょうか? コンパイラは gcc version 4.0.1 (Apple Inc. build 5465) です。







[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<246KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef