返回一个对象时,我不能简单地在类名之后使用{}

时间:2015-05-14 02:39:00

标签: c++ return

以嵌套类的教育代码为例:

class enclose {
    struct nested { // private member
        void g() {}
    };  
public:
    static nested f() { return nested{}; } 
};   

int main() {
    //enclose::nested n1 = e.f(); // error: 'nested' is private

    enclose::f().g(); // OK: does not name 'nested'
    auto n2 = enclose::f(); // OK: does not name 'nested'
    n2.g(); }

将此代码复制并粘贴到Microsoft Visual Studio 2012时,我在行中出现错误

static nested f() { return nested{}; }

其中问题与函数返回嵌套的方式有关。这不是我第一次看到代码以这种方式返回值,但我通常会忽略它并以更长的方式执行它。这是编译器问题吗?

1 个答案:

答案 0 :(得分:5)

该行

return nested{};

使用新的C ++ 11 braced-initializationvalue-initializes对象。正如您所见here,Visual Studio 2012(VC11)不支持支撑初始化,因此您会收到编译时错误。

唯一的解决方案是使用

return nested();

代替,或者更新你的编译器。