19得票2回答
我说将const_cast用于修改绑定到临时对象的常量引用是正确的,这样说对吗?

我希望确认自己对这个问题的理解和结论是否正确。 在IRC上,有人问: 将绑定到临时对象的const引用进行const_cast是否可接受? 翻译:他有一个绑定到临时对象的const引用,并想要去除其const属性以进行修改。 我的回答是,我之前曾问过类似的问题,共识似乎是临时对...

19得票2回答
临时寿命延长

标准的第12.2.5节规定: 函数调用中引用参数的临时绑定(5.2.2)持续到包含该调用的完整表达式完成为止。函数返回语句中返回值的临时绑定(6.6.3)持续到函数退出为止。在所有这些情况下,在初始化引用的表达式求值期间创建的临时值(除了与引用绑定的那个临时值)将在创建它们的完整表达式结束时...

18得票4回答
延长临时物品的使用寿命

允许这个的设计理念是什么? const Foo& a = function_returning_Foo_by_value(); 但不是这个 Foo& a = function_returning_Foo_by_value(); ? 第二行可能会出什么问题(第一行已...

18得票5回答
为什么 T() = T() 是被允许的?

我相信表达式 T() 会创建一个 rvalue(根据标准)。然而,下面的代码可以编译通过(至少在 gcc4.0 上): class T {}; int main() { T() = T(); } 我知道这在技术上是可能的,因为成员函数可以在临时对象上调用,上述代码只是在从第一个...

17得票3回答
一个初始化临时变量什么时候被销毁?

今天回答了一些问题后,我构建了这个实验。struct A { bool &b; A(bool &b):b(b) { } ~A() { std::cout << b; } bool yield() { return true; } }; ...

16得票2回答
在临时范围上使用基于范围的for循环

由于valgrind中出现了一些分段错误和警告信息,我发现这段代码是不正确的,并且在for-range循环中存在某种悬空引用。#include<numeric> #include<vector> auto f(){ std::vector<std::ve...

16得票1回答
C++使用不同括号实现寿命扩展

我正在试图理解C++中的生命周期延长保证。有人能否解释一下为什么在以下不同类型的括号使用下,临时对象析构函数被调用的时间会产生不同的结果? #include <iostream> struct X { X() { std::cout << ...

15得票3回答
C++基于范围的for循环遍历valarray右值无法工作

我想迭代一个临时的valarray,但它无法正常工作。这是我的(不起作用的)代码:#include <iostream> #include <valarray> int main() { using namespace std; vala...

15得票1回答
在C语言中,如何在临时(复合字面量)参数中获取地址?

我无法想象这不是重复的问题,但由于更复杂的场景特别是涉及C ++的情况似乎占据了讨论的主导地位0。 在C99中,从函数调用的参数列表中构造临时对象并获取其地址是否合法? 例如,像以下的init_list或init_desig_init:typedef struct { int x; ...

15得票3回答
一个默认参数暂时绑定到引用参数的寿命是多久?

我认为引用只能将临时对象的生命周期延长到引用本身的生命周期,但以下代码片段的输出似乎与此相矛盾:#include <iostream> struct X{ ~X(){ std::cout << "Goodbye, cruel world!\n"; } }; X co...