15得票1回答
通过获取子对象的引用来延长临时对象的生命周期

在cppreference.com和C++11标准中,关于临时对象何时生命期延长有微妙的差异(重点是我的)。 来自cppreference.com: 当引用绑定到临时对象或临时对象的基类子对象时,临时对象的生命期将延长以与引用的生命期相匹配, 来自C++11标准: 第二种...

14得票7回答
C++11中如何传递指向临时变量的指针?

我有一个现有的函数:void foo(const Key* key = nullptr) { // uses the key } 我想传递一个临时 Key 对象(即 rvalue)的指针,例如: foo(&Key()); 这会导致编译错误,但是在C++11/14中有没有一种方法可以...

14得票2回答
未定义行为和临时变量

1) 返回对临时对象的引用是否属于未定义的行为,即使该引用未被使用?例如,这个程序是否保证输出“good”:int& func() { int i = 5; return i; } int main() { func(); cout <<...

14得票3回答
C++ 返回临时对象混淆

我有一个相当基础的C++问题:考虑一个函数,它接受一些输入参数,并从这些参数创建一个std::string,例如下面的函数:std::string constructString( int some_parameter ) { std::stringstream ss; ...

12得票2回答
Rust中涉及临时变量的销毁顺序问题

在C++中(如有错误,请指正),通过常量引用绑定的临时变量应该比其所绑定的表达式存在更长时间。我以为在Rust中也是这样,但在两种不同情况下我得到了两种不同的行为。 考虑以下代码:struct A; impl Drop for A { fn drop(&mut self) { pri...

12得票1回答
如何防止对常量引用参数进行临时材料化

我需要编写一个类,其构造函数接受一个常量引用对象并将其存储在本地。 为了避免我预见到的大多数常见错误,我只想接受非临时对象的引用(即:对左值的引用)。 我该如何编写一个只接受非临时对象的常量引用的函数? 当然,即使是非临时的引用也可能超出范围,从而破坏我的类行为,但我相信通过禁止临时...

12得票2回答
临时对象最初是const吗?

这段代码是否有未定义行为(UB)? struct A { void nonconst() {} }; const A& a = A{}; const_cast<A&>(a).nonconst(); 换句话说,这个(临时的)对象最初是const吗?我查了标准...

11得票2回答
临时材料化转换-术语和概念的混淆

大家好,stackoverflow社区, 我已学习C++数月,最近试图理解涉及“new”值类别、移动语义和特别是临时材料化的概念。 首先,我不清楚如何解释术语“临时材料化转换”。对我来说,转换部分很明确(prvalue -> xvalue)。但在这种情况下,“临时”的定义是什么意思呢...

11得票3回答
为什么返回字符串字面量的引用是返回临时对象的引用?

一个普通字符串字面值有如下定义: 普通字符串字面值和UTF-8字符串字面值也被称为窄字符串字面值。窄字符串字面值的类型为“数组 n 个 const char”,其中n是所定义的字符串大小,具有静态存储期(3.7)。 我认为由于它具有静态存储期并且它们通常放置在ROM中,如果存在悬挂...

11得票1回答
现代C++中临时寿命延长(Temporary Lifetime Extension)什么时候有用?

在C++中,您可以将函数的返回值(返回值而不是引用)绑定到const引用上,代码仍然有效,因为这个临时对象的生命周期将延长到作用域的末尾。例如:std::string get_string() { return "abc"; } void f() { const std::...