首页 > TAG信息列表 > temporary-objects

c – 临时对象最初是const吗?

这个代码是UB吗? struct A { void nonconst() {} }; const A& a = A{}; const_cast<A&>(a).nonconst(); 换句话说,(临时)对象最初是const吗?我已经查看了标准,但找不到答案,所以会对相关部分的引用表示赞赏. 编辑:对于那些说A {}不是const的人,你可以做A {}.nonconst()吗?解决方法:

c – 临时绑定到引用参数的默认参数的生命周期是多少?

我认为引用只会将临时工具的生命周期延长到引用本身的生命周期,但下面代码片段的输出似乎是矛盾的: #include <iostream> struct X{ ~X(){ std::cout << "Goodbye, cruel world!\n"; } }; X const& f(X const& x = X()){ std::cout << "Inside f()\n"; return x; }

C破坏表达式中的临时对象

给出以下代码: #include <iostream> struct implicit_t { implicit_t(int x) : x_m(x) { std::cout << "ctor" << std::endl; } ~implicit_t() { std::cout << "dtor" << std::e

c – 如何创建临时对象以及实际执行的操作是什么?

任何人都可以解释这段代码的输出是: deleting 0xbfc69f7c 3,7 deleting 0xbfc69f84 2,4 deleting 0xbfc69f8c 1,3 为什么在从重载运算符返回期间创建的临时对象析构函数不会被调用.在函数内部创建的Fraction对象及其临时副本是否相同,析构函数只调用一次,我想不应该是这种情况.

c – 为什么非const引用参数可以绑定到临时对象?

char f1(); void f2(char&); struct A {}; A f3(); void f4(A&); int main() { f2(f1()); // error C2664. This is as expected. f4(f3()); // OK! Why??? } error C2664: ‘void f4(char &)’ : cannot convert argument 1 from ‘char’ to ‘c

c – 现在非临时工作的非常规参考?

随着移动语义的引入,您是否只能将临时工具绑定到const引用更改?非const似乎也延长了寿命. A getA() { return A();} A & aref = getA(); //OK string & str = string("h") + string("i"); //OK again 这是使用msvc,A的析构函数在主退出之前不会被调用.解决方法:不,规则是相

c – 返回值总是暂时的吗?

This页说了一件奇怪的事: – 仅当您的程序没有将返回值复制到对象并且给定示例时,才会创建临时对象 UDT Func1(); // Declare a function that returns a user-defined type. ... Func1(); // Call Func1, but discard return value. // A t