简 述: 对于 STL
中 std::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
- 讨论过程,见 C++ std::set 留言区。
- 完整源码亦见 Unique.cpp
系列地址
欢迎 star
⭐ 和 fork
🍴 这个系列的 C++ / QT / DTK
学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费!”