2011-04-12 63 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类型的临时引用。