次のコードセーフです(DEBUGで動作します):
void takesPointer(const Type* v);//this function does read from v, it doesn't alter v in any way
Type getValue();
...
takesPointer(&getValue());//gives warning while compiling "not an lvalue"
...
Type tmp = getValue();
takesPointer(&tmp);//this is safe, and maybe I should just do it, instead of posting here
それで - それは安全ですか?それを忘れて、明示的な tmp でコードを使用する必要がありますか?
とにかく-オプティマイザーがこの呼び出しから戻る前に一時的なものを強制終了できるかどうか、私はまだ興味があります:
takePointer(&getValue())
編集:ありがとうございました!残念ながら、関数「takesPointer」(ライブラリの一部です)を変更することはできません。関数「takesReference」でラップすることしかできませんでした。これはtakePointerを呼び出します-これによりコピーが削除されるか、コンパイラは引き続き作成できますかコピー(「タイプ」はint-3x3-Matrixなので、それほど悪くはありませんが、それでも...)?
inline void takesReference(const Type& v){ takesPointer(&v); }
破壊の時期について:「takesPointer」が戻った後、または呼び出された後に破壊されますか?