2011-04-12 75 views

回答

10

是的,s2是合法的。 s2綁定到一個臨時std :: string - 擴展了臨時的生命週期。 s1不是臨時的,它是一個命名變量。

見12.2/5:

的第二上下文是當參考 被綁定到一個暫時的。臨時 到其中參考結合或 臨時即完整的對象 到的臨時 綁定持續的 基準的壽命,只是按照下面指定 的子對象。

+0

那麼在這種情況下,s2引用的臨時生命期有什麼保證? (即有什麼例外) – briantyler 2011-04-12 13:13:32

+0

@B Tyler:終身是const ref的一生。例外是(C++ 03)標準中的一半,一般來說,上述工作除非您綁定到另一個範圍內的臨時文件而非綁定文件。 – Erik 2011-04-12 13:19:08

3

兩者都是合法的。
S1是一個帶有const限定符的std :: String類型的變量。
S2是const對std :: string類型的臨時引用。