C++关于()和{}初始化对象的问题?

发现一个用 () 初始化和用 {} 初始化的问题。
问题如下:

#include <set>
using namespace std;

class A{
public:
    static bool compare(int a, int b) { return a<b; }
    // 为什么这里必须使用 {compare} 而不能使用 (compare)
    // 使用 (compare) 则编译错误
    multiset<int,decltype(compare)*> s{compare};
};

int main()
{

    return 0;
}

但是下面的可以:

#include <set>
using namespace std;

bool compare(int a, int b) { return a<b; }

int main()
{
    // 这里定义时使用了 (compare) ,编译通过
    multiset<int,decltype(compare)*> s(compare);

    return 0;
}
阅读 2k
2 个回答

类成员 的 "member-declarator" 只能使用 "brace-or-equal-initializer", 不能用 () 形式。

和成员函数声明冲突

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