C++20 —— Ranges 从一个例子说起12345678910111213141516171819202122232425262728293031323334#include <iostream>#include <ranges>int main(){ auto even = [](int x){return x % 2 == 0;}; for(int x = 1, c 2024-06-10 C++ C++20 Ranges
C++14特性汇总 有关auto函数值可以返回autoauto关键字可以用于函数返回值推导和lambda表达式参数列表的类型推导 12template<typename T>auto foo(T t) { return t; } 甚至这样也可以:有一个退出路径返回了具体类型: 12345auto fabonaci(int n) { if (1 == n || 2 == 2024-06-10 C++ C++14
C++17特性汇总 C++17特性汇总这里只挑取一些比较感兴趣的话题 结构化绑定Structured Binding 类/结构体: 1234567891011struct B { int a = 1; int b = 2;};struct D1 : B {};auto [x, y] = D1{}; // OKstruct D2 : B 2024-06-10 C++ C++17
记录一个由于GMP参数类型不匹配导致的BUG 记录一个由于GMP参数类型不匹配导致的BUG原因在于一次用GMP的SendObjectMessage时我写了如下代码: 其中SourceActor是一个Actor*类型, Character是一个Character*类型, 代表着 SourceActor把Character的盾击碎。 而在声明这个MessageKey时,由于想到这个MessageKey会被其他两个物体用到,比如炮台A击碎了炮塔B 2023-03-22 UE GMP UE杂记
从C++的POD谈起,到memcpy/memmove的安全性 C++中的POD类型(Plain Old Data)谈起,到memcpy的安全性 最近在写代码时恰巧看了下GMP的源码,发现了里面对委托函数的参数类型规定为指针,引用或是pod,其中pod的判断是std::is_pod,那么什么是POD类型呢? 我们知道C++在一定程度上可以说是C的超集,在C中struct不过是一堆数据的合集,但是在c++中,类的概念出现了,它不仅仅是简单的把 2023-02-26 C++
《EffectiveModernC-》第六章-Lambda表达式 第六章 lambda表达式Item31:避免使用默认捕获模式lambda一大作用就是简化了谓词繁琐的创建 1std::find_if(container.begin(), container.end(),[](int val){ return 0 < val && val < 10; }); 标题提到: 避免使用默认捕获模式,lambda中 2023-02-25 C++ EffectiveModernCPP
《EffectiveModernC-》第五章-移动语义,完美转发 第五章 右值引用,移动语义,完美转发Item 23:理解std::move和std::forward这里是一个C++11的std::move的示例实现。它并不完全满足标准细则,但是它已经非常接近了。 123456789template<typename T> //在std命名空间typename remove_reference&l 2023-02-05 C++ EffectiveModernCPP
《EffectiveModernC++》第四章:智能指针 第四章 智能指针item18:对于独占资源使用std::unique_ptr对于auto_ptr这个C++98的产物,已经被移除了,他的升级版其实就是unique_ptr, auto_ptr的失败是由于缺少移动语义,具体可以看: https://zhuanlan.zhihu.com/p/551883955 这一节这里不过多描述,以前读过很多相关的了,这里基本的不再提起。这里提几个原文中几个有趣的 2022-12-03 C++ EffectiveModernCPP
《EffectiveModernC++》第三章:移步现代C++ 第三章 移步现代C++item7:区别使用()和{}创建对象12345int x(0); //使用小括号初始化int y = 0; //使用"="初始化int z{ 0 }; //使用花括号初始化 在很多情况下,你可以使用”=”和花括号的组合: 1int z = { 0 }; 2022-12-03 C++ EffectiveModernCPP