lyr*_*cat 2 c++ compiler-construction standards
struct SomeStruct
{
int a;
int b;
};
SomeStruct someFn( int init )
{
SomeStruct ret = { init, init };
//...
return ret;
}
void someFn2( SomeStruct* pStruct )
{
// ..
}
int main( )
{
someFn2( &someFn(32) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 19
不,它无效.
从5.2.2/10 [expr.call]" 当且仅当结果类型是引用时,函数调用才是左值.
从5.3.1/2 [expr.unary.op]"操作数应为左值或限定id ".
someFn(32)因此,它不是一个左值,因为SomeStruct它不是一个引用,你使用它作为&需要左值的操作数.
$ g++ -Wall -o stuct struct.cc struct.cc: In function ‘int main()’: struct.cc:21: warning: taking address of temporary
你可能应该这样做:
int main( )
{
SomeStruct s = someFn(32);
someFn2(&s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不,这不对.
你只能在左值上使用&.SomeFn(32)不是左值.
你的主要应该是这样的:
int main( )
{
SomeStruct s;
s = someFn(32);
someFn2(&s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |