我的問題是關於C++中的臨時變量以及如何最好地避免它們的陷阱。C++臨時變量的生存期
在有些情況下,我們做類似下面的內容實例:
SomeFunctionReturningStdString().c_str();
其中SomeFunctionReturningStdString()
按值返回std::string
。
我們已經發現,但是這會導致不確定的行爲,並提出了兩個建議,以解決此問題:
std::string temp = SomeFunctionReturningStdString();
temp.c_str();
..similar在此link指定的解決方案。
或使SomeFunctionReturningStdString()
通過引用返回std::string
。這樣,如果我的理解是正確的,那麼就不會創建一個臨時對象,因爲我們現在有了對該對象的引用。
這兩個解決方案是否有效?他們都可以避免與臨時變量相關的陷阱嗎?
不幸的是,你的例子被簡化爲不再相關。是的,這裏有一個暫時的,但它足夠長(完整的表達),所以'c_str'調用本身是有效的。返回的'char const *'指針在臨時字符串的同一時刻(final';')過期。 – MSalters