相关疑难解决方法(0)

***const参考是否延长了临时生命?

曾几何时,我认为像这样的代码会失败:

const MyClass& obj = MyClass();
obj.DoSomething();
Run Code Online (Sandbox Code Playgroud)

因为MyClass对象将在其完整表达式的末尾被销毁,而将obj作为悬空引用.但是,我(这里)得知这不是真的; 该标准实际上有一个特殊的规定,允许const引用保持临时值,直到所述引用被自己销毁.但是,有人强调,只有const引用具有这种能力.今天我在VS2012中运行了以下代码作为实验.

struct Foo
{
    Foo() { std::cout << "ctor" << std::endl; }
    ~Foo() { std::cout << "dtor" << std::endl; }
};

void f()
{
    Foo& f = Foo();
    std::cout << "Hello world" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

调用时的输出f()是:

ctor  
Hello world  
dtor  
Run Code Online (Sandbox Code Playgroud)

所以我查看了C++ 11草案标准,并且只发现了这个(§12.2/ 4):

有两种情况,临时表在与完整表达结束时不同的地方被摧毁.第一个背景[不适用].第二个上下文是引用绑定到临时的.绑定引用的临时对象或绑定引用的子对象的完整对象的临时对象在引用的生命周期内持续存在.

const上面显然没有这个词.所以; 有没有为C++ 11改变这种行为,我const开始的事情是错的,还是VS2012有一个bug,我还没有找到标准的相关部分?

c++ language-lawyer c++11 visual-studio-2012

16
推荐指数
3
解决办法
991
查看次数

它是如何工作的,Test*pObj = new Test(); 因为构造函数不返回任何内容

我想在c ++上做得更好.我在main()中有一个Test类和下面的代码.

Test *pObj = new Test();
Run Code Online (Sandbox Code Playgroud)

如果我们通过逐步逐步调试来调试,首先它转到新函数来分配内存,然后调用构造函数.然后它回到main()函数.众所周知,构造函数不会返回任何内容.在那种情况下,为什么pObj将具有由new分配的指针?知道编译器是如何实现的吗?

c++

1
推荐指数
1
解决办法
474
查看次数

如何在C++中使用构造函数?为什么它似乎允许使用它作为参数?

我偶然发现了这个问题(这是一个不同的例子).大多数人说构造函数不会返回任何内容.但是,为什么我的例子有效呢?

sequence(1, 2)是一个构造函数,显然可以在我的机器上使用.我使用g++和尝试没有选项和C++ 11选项.两者都适用于我的情况.

这个例子来自一门课​​程.我按原样复制,无论是否public有意义,或其他.

例:

#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;

void printer(int i) {
    cout << i << ", ";
}

struct sequence {
    int val, inc;
public:

    sequence(int s, int i) : val(s), inc(i) {
        cout << "Sequence(" << val << ", " << inc << ")" << endl;
    }

    operator int() const {//LINE I
        int r = val;
        cout << r << endl; …
Run Code Online (Sandbox Code Playgroud)

c++ constructor return

-1
推荐指数
1
解决办法
140
查看次数