C++ 关于multiset 的 compare 函数指定问题

1.当我为类Basket 创建了一个成员类型为 multiset 的时候, 指定compare使用multiset
构造发生问题。

2.程序代码如下:

class Basket
{
private:
    static bool comp(const std::shared_ptr<Quote> &lhs,
                        const std::shared_ptr<Quote> &rhs);
    std::multiset<std::shared_ptr<Quote>, decltype(comp) *>
                _items{comp};

    /*
    error: ‘comp’ is not a type
                 _items(comp);

    std::multiset<std::shared_ptr<Quote>, decltype(comp) *>
                _items(comp);
    */
}

3.编译指令:

g++ -s -std=c++11 -w -Wall -Werror quote.cc -o quote.so

4.报错信息:

使用()调用multiset的构造函数会出错, 但是使用{} 就能正确, 这是什么道理?

quote.h:226:24: error: ‘comp’ is not a type
                 _items(comp);
阅读 2k
1 个回答

通过default member initializer来初始化数据成员只有两种合法写法,第一种是list initialization,即一对花括号。第二种是copy initialization,即等号。

如果你尝试用圆括号,编译器会把这行声明当作函数声明来处理。所以报“comp不是类型”的语法错误。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题