参数语法

时间:2012-06-27 19:17:25

标签: c++ syntax

我遇到了这个示例类http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/sp_techniques.html#as_lock,我正在努力学习语法。

class shared_lock
{

private:

    shared_ptr<void> pv;

public:

    template<class Mutex> explicit shared_lock(Mutex & m): pv((m.lock(), &m), mem_fn(&Mutex::unlock)) {}
};

我(相信我)理解除了这部分之外的所有事情“(m.lock(),&amp; m)”。整个事情似乎是初始化智能指针的第一个参数。那个复合语句对什么评价?它只是m的地址吗?为什么将锁放在那里作为参数列表的一部分(以及它是如何合法的)?相反,我本来期望一个声明如下:

template<class Mutex> explicit shared_lock(Mutex & m): pv(&m, mem_fn(&Mutex::unlock)) {m.lock();}

我的备用语句是否会更改功能?

1 个答案:

答案 0 :(得分:2)

  

该复合声明评估的内容是什么?它只是m的地址吗?

  

为什么将锁放在那里作为参数列表的一部分(以及它是如何合法的)?

构造函数需要获取锁,并且它是一个可以放置的对象。否则必须在构造函数的主体中设置共享指针。

这是合法的,因为表达式(包括逗号运算符)用于初始值设定项。需要额外的括号来消除逗号运算符与逗号分隔参数的歧义,否则大多数表达式都是允许的。