2011-12-20 11 views
3

関数型(左辺)は、関数へのポインタ(右辺)に変換できます。関数変換へのポインタの明確化

int func(); 
int (*func_ptr)() = func; 

が非関数の左辺値(3.10)

(4.1/1)から、非アレイ型Tは、右辺値に を変換することができます。

左辺値と右辺値の変換が関数に対して行われていないことを意味しますか?また、配列に配列が崩壊すると、それはポインタであるrvalueを返しませんか?

答えて

3

関数は左辺値です。関数(データ型)へのポインタは でもかまいません。あなたが名前をつけたら、それは左辺です。それ以外の場合は、 (大雑把に言えば)ではありません。関数へのポインタは、通常の左辺値 のすべての変換規則に従います。基本型や ポインタのような単純型の場合、左辺値と右辺値の変換は基本的に変数 の読み込みを意味します。

()オペレータが両方の機能で動作や機能に ポインタので、最後の2行を書き込むことができることが関数の暗黙的な変換が 関数へのポインタである、その
void func();   // Declares func 
(*(&func))();   // The expression &func is an rvalue 
void (*pf)() = &func; // pf is an lvalue 
(*pf)();    // In the expression *pf, pf undergoes an 
         // lvalue to rvalue conversion 

void (*pf)() = func; 
pf(); 

いつものように、変換の結果は( が参照型に変換されていない限り)右値です。これは、配列 が暗黙的にポインタに変換される場合にも当てはまります。配列と関数の両方とも、左辺値として しか存在できません。しかし、はどちらも暗黙的にポインタに変換されます。 は右辺です。しかし、そのポインタを使用して、適切なポインタ型の変数 を初期化することができます。そのような変数は左辺値です。

+0

私は見ているので、あなたの読書がいくらか価値があるということを意味するものではありません。右? – user1086635

+0

何の結果?関数のポインタへの変換の結果は、関数のアドレスである値です。メモリ内にアドレスがありません(これは左辺値の特性です)。 –

+0

関数 'func'の結果はアドレスではあるが、関数以外の型や配列以外の型から返されたrvalueの意味ではないrvalueです。これが(4.1/1)の文ですか? – user1086635

関連する問題