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