You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++调用sort函数时greater<int>后为什么需要添加括号

问题解答

你现有的理解基本都是正确的,唯一的小偏差是对sort函数参数要求和对象构造逻辑的认知:

  • greater<int>是模板参数实例化后的类型名,和int、std::string这类类型标识性质完全相同,函数参数只能接收实例、不能直接接收类型,所以不能直接把greater<int>传给sort的第三个参数。
  • 末尾加的()是C++中调用默认构造函数创建临时对象的语法,greater<int>()就是生成一个greater<int>类型的临时实例,这个实例才是sort函数要求传入的可调用比较对象。

你可以用下面的等价写法做对比,就更容易理解:

// 先显式创建greater<int>类型的实例
greater<int> cmp_obj;
// 直接传入实例,不需要额外加括号
sort(a.begin(), a.end(), cmp_obj);

这种写法和你直接传greater<int>()的效果完全一致,后者只是省去了单独定义变量的步骤,直接传递临时构造的对象而已。

另外你补充的认知完全正确:C中struct和class只有默认成员访问权限、默认继承权限的区别,结构体的实例本来就属于C的对象范畴,称呼为对象没有任何问题。

内容的提问来源于stack exchange,提问作者Shobhit Tewari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 22:06:05