const std::string s1 = "abc";
const std::string & s2 = "abc";
s2
的定义是否合法?如果是这样,s1
和s2
之间的区别是什么?C++:对本地对象的const引用
谢谢。
const std::string s1 = "abc";
const std::string & s2 = "abc";
s2
的定义是否合法?如果是这样,s1
和s2
之间的区别是什么?C++:对本地对象的const引用
谢谢。
是的,s2是合法的。 s2绑定到一个临时std :: string - 扩展了临时的生命周期。 s1不是临时的,它是一个命名变量。
见12.2/5:
的第二上下文是当参考 被绑定到一个暂时的。临时 到其中参考结合或 临时即完整的对象 到的临时 绑定持续的 基准的寿命,只是按照下面指定 的子对象。
两者都是合法的。
S1是一个带有const限定符的std :: String类型的变量。
S2是const对std :: string类型的临时引用。
那么在这种情况下,s2引用的临时生命期有什么保证? (即有什么例外) – briantyler 2011-04-12 13:13:32
@B Tyler:终身是const ref的一生。例外是(C++ 03)标准中的一半,一般来说,上述工作除非您绑定到另一个范围内的临时文件而非绑定文件。 – Erik 2011-04-12 13:19:08