函数参数对象是否为临时对象?C++标准草案相关疑问
关于C++标准[class.temporary]/7章节表述的疑问解答
你的理解完全正确:函数参数对象本身确实不属于临时对象。标准里新增的“除函数参数对象之外的临时对象”这句话,核心是为了明确排除一类容易混淆的场景,避免规则被误读。
具体来说,当函数参数是绑定到临时对象的引用(或值传递场景下的参数)时,之前的标准文本可能会让开发者误以为参数对象本身属于临时对象,进而错误套用临时对象的生命周期延长规则。新增这句话就是为了精准划清边界:临时对象特指那些由表达式创建的匿名对象(比如std::string("test")这种),而函数参数对象(无论是值参数还是引用参数)是函数调用时创建的参数实体,不属于临时对象范畴。
举个直观的代码例子:
void print(const std::string& str) { // str是函数参数引用对象,它绑定的是外部传入的临时对象 } print(std::string("hello"));
这里std::string("hello")是真正的临时对象,而str作为函数参数,本身是一个引用实体,并非临时对象。标准的新增表述就是为了明确:临时对象的生命周期规则仅适用于前者,后者不在规则覆盖范围内。
内容的提问来源于stack exchange,提问作者user17732522
相关产品推荐
相关产品推荐

