5
std::string getMyString() { return <make a string>; }

...

HANDLE something = OpenSomething(getMyString().c_str(), ...);

私はC++で一時的な保証された寿命を読みました.一時的な文字列は、割り当てが評価されるまで、つまり、これを期待どおりに機能させるのに十分な長さで存続すると信じています.

以前にstd::string生涯関連のバグに遭遇したことがあります(それが何であったか思い出せません)私はむしろ再確認したいと思います...

4

3 に答える 3

8

一時的なデストラクタは、関数呼び出しが戻るまで呼び出されないため、ここに表示されているものは安全です。

ただし、呼び出された関数が を保存し、が戻った後char*に何らかの形で使用される場合、それは 1 つの細かいダングリング ポインターです。 OpenSomething

于 2011-03-27T13:01:58.000 に答える
7

はい、これでいいです。:-)

文字列は、ステートメントの末尾のセミコロンで破棄されます。

于 2011-03-27T13:02:09.373 に答える
0

OpenSomthingすべてへのポインターを返すために他の引数を使用しない場合は問題ありませんgetMyString.c_str()

于 2011-03-27T13:27:16.390 に答える