[C/C++]無名仮引数?

Maya2008のdevkit/pluginに入っていたサンプルプラグイン、curvedArrowsNode.cppの中からこんな記述を発見。

void curvedArrows::draw(M3dView & view, const MDagPath & /*path*/,
                             M3dView::DisplayStyle style,
                             M3dView::DisplayStatus status ) { ... }

関数のプロトタイプ宣言をする際に変数の名前を記述しないことが可能なのは知ってたけど、
実際に関数の定義を行う際にもこういうことが可能だったとはしらなかった。

constついて名前なしということは、使わないから名前も必要ない、ってこと?
なんか見たことない記述だから気にしてみたけど、あまり気にする必要もないようなこと、なんでせうか。
これで実際に速度がどうとか言われたら、非常に気になる内容ではあります。

「[C/C++]無名仮引数?」への2件のフィードバック

  1. # 始めまして、Mayaの記事で参考になることがあるので購読しています。

    継承された仮想関数をオーバーライドする場合、当然引数も基底元と同様である必要があるのですが、派生先で特定の引数を使用しない場合、仮引数を省略することがあります。

    省略される動機としては、その引数が実装において使用されないことを明示できること。そして、一部のコンパイラ(オプション)は使用されていない仮引数に対して警告を発してくるのでその抑制にあります。

    省略したからと行って速度や生成されるコードに利点があるわけではありません。

    # まだコメントが付いていなかったので、回答してみました。

  2. >mynzさん
    はじめまして!コメントありがとうございます。
    mynzさんのお名前はあきをさんのブログで何度かお見かけしたことが。

    > 省略される動機としては、その引数が実装において使用されないことを明示できること。
    なるほど、やはりそういうことなんですね。

    というと使わないものには名前をつけない方が正しい、美しい形になるということなんでしょうか。

    人によってはこういうのはやめたほうが良い、なんていう人もいるんですが、好みの問題なんですかね。

    僕の個人的な意見だと、使わないものの名前を考えるのは面倒くさい&無駄だと思うので、こちらを使いたい感じです。

    コンパイラからもあまり怒られたくないですし:P

    > 省略したからと行って速度や生成されるコードに利点があるわけではありません。
    なるほど、これは逆に安心しました。
    こういう場所までしっかり手いれないと速度がアレだ、なんてことになると逆にいろいろ面倒な気がしてしまうので:P

    非常に参考になりました。
    ありがとうございます!

コメントを残す

メールアドレスが公開されることはありません。