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
相关产品推荐
相关产品推荐

