简 述: 对于 STLstd::set 创建自定义结构体的对象,发现使用 “函数对象”“定义普通函数 + decltype” 两种方式会有差异,且其中一种书写会导致崩溃?探究一番后,值得记录一下。

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


正文

对于 std::set 创建对象分为两种:⒈基础数据类型; ⒉自定义结构体类型。前者教程很多,故仅讲述后者;

💻 win10 21H2 📎 Visual Studio 2019 📎 C++17


其中对于其中两种方式创建,使用示例如下,此处直接放结论:

  • 函数对象(仿函数)
  • 定义普通函数 + decltype
std::set<MyData, cmpSortObj>  s;                      // "函数对象"创建 set 对象 --> OK

std::set<MyData, decltype(cmpSort)*>  s(&cmpSort);    // "定义普通函数 + decltype"创建 set 对象 -->    OK:  编译、运行成功;调试也成功
std::set<MyData, decltype(cmpSort)*>  s;              //                                     --> Error:  编译、运行成功;调试会失败

Ref


系列地址

QtExamples

欢迎 star ⭐ 和 fork 🍴 这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费!”