3

私の人生では、typedef を C++ ステートメントに変換するために使用される規則についての適切な説明を見つけることができません。私が理解している単純なケース。しかし、ダニー・カレフの次のことを考えてみてください。

typedef char * pstr;
int mystrcmp(const pstr, const pstr); //wrong!

ダニー・カレフは次のように書いています。

シーケンス const pstr は、実際には char * const (char への const ポインター) を意味します。const char * ではありません (const char へのポインター。

「const pstr」が「char * const」に変換される理由を説明するルールはどこにも見つかりません。

助けてくれてありがとう。

4

2 に答える 2

5

isはandpstrのエイリアスだからです。char*const pstrconst (char*)(const char)*

于 2012-05-22T16:06:45.130 に答える
3

typedef はマクロとは異なります。単純なテキスト置換を実行するだけではありません。typedef は単一のユニットを定義し、追加constは全体に適用されます。定義されたユニットはポインターなので、それに適用constすると const ポインターが得られます。

あなたが期待した結果は、内部の何かに適用するタイプconstの「内部に到達」する必要があります。pstrその型内でより多くのポインタ レベルが宣言されると、さらに悪化します。を考慮してくださいtypedef char*** pppstr。それを achar const***にするには、型の奥に 3 レベルconst挿入する必要があります。型定義が実際にどれほど複雑であっても、ルールが一貫して外側のレベルに適用される方がよいでしょう。pppstrconst

于 2012-05-22T16:11:04.893 に答える