3

重複の可能性:
const int*、const int * const、int const * の違いは何ですか

このコード行に出くわしたとき、私は FLTK コードを読んでいました。

Fl_Widget*const* a = array();

実際のコードは次のとおりです。

Fl_Widget*const* Fl_Group::array() const {
    return children_ <= 1 ? (Fl_Widget**)(&array_) : array_;
}

int Fl_Group::find(const Fl_Widget* o) const {
    Fl_Widget*const* a = array();
    int i; for (i=0; i < children_; i++) if (*a++ == o) break;
    return i;
}

今、ポインタ変数の型は何だろうと思っていますaFl_Widget*const* a = array();Fl_Widget** const a = array();等しいですか?

4

1 に答える 1

3

右から左に読む:

Fl_Widget      *            const            *              a
          "pointer to" <- "constant" <- "pointer to"  <- "a is"

合計すると "aへの定数ポインターへのポインターFl_Widgetです。

スタイルの宣言はVAR a: POINTER TO CONST POINTER TO Fl_Widgetもう少し明確だったでしょうが、C++ は変数宣言構文を C から引きずり出し、C はすべて式であり、データ型ではありませんでした。なんと、const単語すらなかったので、考える必要はなく、明らかに「 is 、 and is 」とint *a, b解読されました。*aintbint

于 2012-12-27T10:13:33.843 に答える