
C++
GarryLau
这个作者很懒,什么都没留下…
展开
-
Microsoft Visual Studio中的/MT, /MTd,/MD,/MDd分别是什么意思?
Microsoft Visual C++ 编译器的运行时库链接选项决定了程序如何链接 C 运行时库(CRT)。具体含义如下:(多线程静态链接):(多线程静态链接调试版):(多线程动态链接):(多线程动态链接调试版):选择考虑因素:发布类型:通常 Release 版本用或,Debug 版本用或。部署需求:如果希望程序独立运行,选择;如果允许依赖系统 DLL,可选择。内存使用:可能在多个程序间共享内存,而每个程序都有自己的 CRT 副本。兼容性:使用第三方库时,需确保所有组件使用相同的运行时库选原创 2025-01-01 20:53:18 · 1162 阅读 · 0 评论 -
std::tuple
【代码】std::tuple。原创 2024-06-25 19:08:26 · 234 阅读 · 0 评论 -
判断一个类型是否有reserve方法
使用std::enable_if_t来帮助选择匹配的函数。以容器是否含有reserve方法作为示例。原创 2024-06-22 20:09:43 · 200 阅读 · 0 评论 -
std::span
有了std::span都省了些写template的功夫了原创 2024-06-16 11:59:34 · 396 阅读 · 0 评论 -
concept
concept是给模板添加限制条件,如果条件不符,代码无法通过编译。类似SFINAE的语法糖。原创 2024-06-16 11:58:03 · 324 阅读 · 0 评论 -
通透比较器
使用通透比较器提升一些容器与比较有关的操作原创 2024-06-16 11:56:57 · 363 阅读 · 0 评论 -
函数重载及SFINAE
函数重载及SFINAE原创 2024-06-16 08:02:16 · 384 阅读 · 0 评论 -
std::unique_ptr、std::shared_ptr定制删除器
std::unique_ptr、std::shared_ptr定制删除器原创 2024-06-16 08:00:33 · 421 阅读 · 0 评论 -
可变参数函数
可变参数函数原创 2024-05-13 23:43:33 · 209 阅读 · 0 评论 -
Functional Programming
Functional Programming原创 2024-05-13 23:36:46 · 322 阅读 · 0 评论 -
std::mem_fn和std::mem_fun
std::mem_fn和std::mem_fun(deprecated)Convert member function to function object,即将成员函数转化为函数对象,这样就可以像普通函数那样使用。原创 2024-05-13 23:36:08 · 274 阅读 · 0 评论 -
特化标准库中的类模板
以std::map和std::less作为载体说明如何特化标准库中的类模板。原创 2024-05-08 23:04:57 · 272 阅读 · 0 评论 -
模板显式特化与隐式特化
当使用一个模板时,称为实例化模板。模板实例是编译器通过将模板参数应用于模板定义而创建的具体函数或类。模板实例又称为特化。因此,rational是模板rational的一个特化。因此,特化是针对特定一组模板参数实现模板的过程。C++允许为一个特定的模板参数集合定义一个定制的特化;也就是说,可以创建一个规则的例外情况。当你自己定义特化而不是让编译器为你实例化模板时,它被称为显式特化(也称为完全特化)。编译器自动创建的特化将是隐式特化。原创 2024-05-08 23:04:18 · 402 阅读 · 0 评论 -
(类)偏特化Partial Specialization
当编写一个模板特化,涉及部分但不是全部模板参数时,它被称为偏特化(Partial Specialization)。【注意,偏特化是针对类模板而言,函数模板不可偏特化,只能全特化】原创 2024-05-08 23:03:39 · 347 阅读 · 0 评论 -
值模板参数Value Template Parameters
模板通常使用类型作为参数,但它们也可以使用值。使用类型和可选名称声明一个值模板参数,方式与声明函数参数类似。值模板参数仅限于可以指定编译时常量的类型是bool、char、int等,但不允许使用浮点类型、字符串字面值和类。原创 2024-05-08 23:02:48 · 352 阅读 · 0 评论 -
类模板是创建类的模式
类模板和函数模板一样,使用关键字template引入一个类模板。类模板是创建类的模式,通过提供模板参数来实现原创 2024-05-06 19:46:41 · 258 阅读 · 0 评论 -
使用模板时模板的定义应该放到头文件
在使用函数模板之前,编译器必须看到不仅仅是一个声明,通常编译器需要完整的函数模板定义。换句话说,如果你在头文件中定义了一个模板,那么这个头文件必须包含该函数模板的主体。原创 2024-05-06 17:30:05 · 316 阅读 · 0 评论 -
对于模板,编译器不会执行任何自动类型转换
作为一个模板,编译器不会执行任何自动类型转换。编译器无法知道你想要模板参数具有第一个函数参数的类型,或第二个函数参数的类型,或者有时是第一个,有时是第二个。相反,编译器要求你明确地写出你的意思。在这种情况下,你可以通过将所需的类型放在尖括号中告诉编译器要使用哪种类型作为模板参数。原创 2024-05-06 16:47:07 · 272 阅读 · 0 评论 -
函数模板含有多个模板参数
如果一个模板接受多个参数,用逗号分隔参数。使用时必要情况下需要主动传入模板参数。原创 2024-05-06 16:45:19 · 252 阅读 · 0 评论 -
structured bindings的方式访问std::map
structured bindings的方式访问std::map原创 2024-05-05 19:17:02 · 151 阅读 · 0 评论 -
不能盲目地将std::vector的push_back替换为emplace_back
使用push_back还是emplace_back的建议:如果push_back的对象是已经存在的,则不建议盲目将push_back替换为emplace_back。因为emplace_back可能会引起不必要的二进制膨胀。如果对象是新创建的,则可以考虑将push_back(Obj(构造参数))改为emplace_back(Obj(构造参数))。原创 2024-05-05 16:12:49 · 216 阅读 · 0 评论 -
std::sort并不支持所有的容器
std::sort并不支持所有的容器,无法对std::list使用std::sort(),但可以使用std::list的方法sort()。原创 2024-05-04 22:12:11 · 273 阅读 · 0 评论 -
移动构造函数是否标记noexcept对性能有重要影响
移动构造标记`noexcept`时才会被正确调用原创 2024-05-04 20:19:41 · 351 阅读 · 0 评论 -
继承体系下的拷贝构造
CRTP(Curiously Recurring Template Pattern) 奇异递归模板模式。使用CRTP的目的是父类在编译时就可以知道子类的信息,将多态调用转为编译期绑定,节省了虚函数调用的开销。不使用CRTP时是虚函数调用,使用CRTP时在编译期利用子类作为模板参数,提早绑定子类,而不是运行时绑定。原创 2024-05-04 14:33:04 · 401 阅读 · 0 评论 -
引用参数的不同种类
【代码】引用参数的不同种类。原创 2024-05-01 18:37:59 · 49 阅读 · 0 评论 -
内联、普通函数、虚函数调用开销比较
普通函数和虚函数开销差异本身并不大,内联可以降低开销。原创 2024-04-29 19:45:17 · 781 阅读 · 0 评论 -
std::string性能优化示例
【代码】std::string性能优化示例。原创 2024-04-27 22:21:50 · 185 阅读 · 0 评论 -
泛型算法
std::remove_if函数删除容器中满足`pred`的元素,返回最后一个没被移除的元素后面一个迭代器(An iterator to the element that follows the last element not removed.),但是容器的大小是不变的。假设`std::remove_if`返回的迭代器是`pend`,虽然容器的大小不变,原创 2024-04-27 19:36:16 · 293 阅读 · 0 评论 -
C++中`Stream-based I/O`是`RAII`机制的
C++中都是RAII机制的,文件流可以不手动close。原创 2024-04-24 12:42:41 · 238 阅读 · 0 评论 -
C++性能测试工具(插桩测试)
【代码】C++性能测试工具。原创 2024-04-08 13:46:35 · 676 阅读 · 0 评论 -
Linux时钟函数
【代码】Linux时钟函数。原创 2024-04-01 21:59:27 · 268 阅读 · 0 评论 -
constexpr与std::is_same_v碰撞会产生什么火花?
constexpr与std::is_same_v碰撞会产生什么火花?原创 2024-03-29 15:34:40 · 861 阅读 · 0 评论 -
std::string_view
而使用std::string_view作为入参可以同时兼容入参是std::string和const char*的情况。可以提供重载的print来避免上述问题,不过会增加代码量。都提供时编译器还是会进行最佳匹配。如下的代码,当只提供入参是。原创 2024-03-28 22:43:02 · 322 阅读 · 0 评论 -
structured bindings is supported from c++17
structured bindings原创 2024-03-28 16:25:04 · 366 阅读 · 0 评论 -
std::string从C++20支持的新Operations
【代码】std::string从C++20支持的新Operations。原创 2024-03-28 14:35:54 · 632 阅读 · 0 评论 -
std::chrono::time_point
【代码】std::chrono::time_point。原创 2024-03-28 14:33:22 · 222 阅读 · 0 评论 -
std::chrono::XXX_clock
【代码】std::chrono::XXX_clock。原创 2024-03-28 11:08:48 · 166 阅读 · 0 评论 -
std::ratio
【代码】std::ratio。原创 2024-03-26 23:21:29 · 602 阅读 · 0 评论 -
format(C++20)
【代码】format(C++20)原创 2024-03-25 23:34:34 · 456 阅读 · 0 评论 -
从txt文本中随机选择一些行
【代码】从txt文本中随机选择一些行。原创 2024-01-14 23:30:40 · 453 阅读 · 0 评论