タグ

参照に関するcielo_eeのブックマーク (4)

  • c++の関数テンプレートと参照 - bugfix

    関数テンプレートでは、型がバインドされるようなので、 こんな書き方ができるみたいです。 template <size_t N> unsigned int foo(const char (&str)[N]) { return N; } int main(void) { std::cout << foo("foo") << std::endl; return 0; } これはstrを参照で渡しているからできることですね。 # 型がconst char [4]になります Cじゃ配列数は渡せないんじゃないかなあ・・・ これの元になったコードを見たときに、 Nがどこから来ているのか分からなかったので、びっくりしました。 というわけで、脈絡もなく階乗のコード置いておきますね。 template <size_t N> unsigned int foo(const char (&str)[N]) { re

    c++の関数テンプレートと参照 - bugfix
  • 参照が使えるときはいつでも参照を使いましょう - 神様なんて信じない僕らのために

    TBをいただいたのと今日はたまたま早く帰宅できたので反応! はてなダイアリー 素晴らしい事にお気づきになられました。 誰だC++に参照なんていう概念を持ち込んだカスは。 びょーんすっぽすっぽ先生を虐めないで>< ということで、マジレスをすると、 参照は良い物です。 C++で問題となる「ポインタ」という悪魔をちょっとだけ和らげてくれる癒し系です。 こうなると、C++の参照渡しってコピーコンストラクタとか演算子のオーバーロードみたいな時にしか使い道ないかも知れないね。 そんなことは全然なくて、 寧ろ「参照が使えるときは参照を使いましょう」が正解。 ええー、って思うかもしれないけれど、 参照はポインタと比べて「安全」である事が利点。 ・無茶をしなければNULLにはならない(何も参照していない状態というのが赦されない=コンパイラチェックが厳密になる) ・演算ができない(有らぬ演算をしてメモリを破壊

    参照が使えるときはいつでも参照を使いましょう - 神様なんて信じない僕らのために
  • const じゃない参照渡しはするなってばっちゃが言ってた - 好き勝手に・げーあにん?

    はてなダイアリー 参照が使えるときはいつでも参照を使いましょう - 神様なんて信じない僕らのために イネスさん - みねこあ 私は constの時は参照を使って、それ以外はポインタを使いましょう派です。中身を読むと、言ってることは、id:Isoparametricさんとほぼ同じ(?)なんですけどね。「いつでも」というタイトルに釣られたw Hoge* huga(Hoge *pOut, const Hoge &in); こうしとくと、呼び出し側の見た目が huga(&a, b); みたいになるので、アドレスを渡してるほうは、関数内で値が変わる。参照を渡してるほうは、constだってすぐわかる。 ‥‥っていうのを最初にバイトで入った会社で知って、それ以来ずっとこのルールで書いてる。 まぁ、これだと戻り値どうするの?って聴かれると結構困るんですけどね。それはまた別の話し。演算子オーバーロードとの兼

    const じゃない参照渡しはするなってばっちゃが言ってた - 好き勝手に・げーあにん?
  • 配列のポインタ渡しと参照渡しの違い - (void*)Pないと

    ポインタ渡しとは以下のような処理です。 #include <iostream> using std::cout; using std::endl; // ポインタ渡し void func(int *a) { cout << a[0] << endl; } int main () { int a[] = {3,4,5,6}; func(a); } また、以下のようにも書くことができます。 void func(int a[]) { cout << a[0] << endl; } 関数の仮引数におけるint a[]はint *aのシンタックスシュガーなのでまったくの同義なのです。 またこのとき要素数の指定も出来ますが、*aのシンタックスシュガーなので無視されます。 #include <iostream> using std::cout; using std::endl; // int *aのシン

    配列のポインタ渡しと参照渡しの違い - (void*)Pないと
  • 1