有人可以解释这个有线C ++代码吗?

时间:2014-07-02 05:46:31

标签: c++

#define WIRED\
  []() {\
    return new MyClass; \
  }()

MyClass* a = WIRED;

我不理解MACRO中的第一个[]()和最后一个()。任何专家都能解释一下吗?感谢。

2 个答案:

答案 0 :(得分:4)

这是一个lambda返回一个动态分配MyClass,它是在适当的位置创建和执行的。

具体做法是:

[](){...}

lambda;剩下的()是lambda的调用。


这是一个无用的lambda AFAIK,您只需写下:

MyClass* a = new MyClass;

或更好:

std::unique_ptr<MyClass> ptr(new MyClass);

答案 1 :(得分:2)

您可能需要了解C ++ 11中的lambda函数。

我相信你能理解这一点:

MyClass* CreateMyClass() { return new MyClass; }
...

std::function<MyClass* ()> creator_function = CreateMyClass;
MyClass* a = creator_function();

然后,lambda函数看起来像:

std::function<MyClass* ()> creator_function = []() { return new MyClass; };
MyClass* a = creator_function();

最后,这也可行:

MyClass* a = []() { return new MyClass; }();