
modern C++
文章平均质量分 89
programing菜鸟
喜欢C/C++, Linux,数据结构的朋友们可以关注我,不会让你失望的。
展开
-
string_view && span
string_viewstring_view是字符串的视图。C++提供的string效率是有点慢的,因为内存的开辟都在堆上。而C++17的string_view可以提高一些效率。所谓的SV(string_view)就是一个const字符串加上一个长度,你可以读取该字符串,但是你不能修改。class string_view{private: const char* data_; size_t size_;};这玩意也不是什么新东西了,C++17之前,就有人这样搞,因为SV对象只有一个指针和一个原创 2022-05-06 18:19:35 · 1146 阅读 · 0 评论 -
C++17(3)
目录类模板类型推导类模板工作原理moretraps模板元编程技巧如何避免类模板类模板类型推导C++17引入了类模板类型推导(class template argument deduction),针对定义类来说,我们不再需要显式初始化,编译器可以帮助我们自动推导。std::vector v{1,2,3}; //ok !编译器会自动推导出v的类型是std::vector< int >,你可能会觉得这是很自然的,毕竟我们已经有了函数的模板类型推导。接下来我将把类模板类型推导叫做CTAD原创 2022-02-23 16:27:58 · 1137 阅读 · 0 评论 -
C++17(2)
目录fold expressionconstexpr iffold expression虽然C++11引入了可变参数,但是没有引入对可变参数进行操作的语言支持。所以在C++17之前,我们只能使用旧的语言特性来解决。我们常使用递归和初始化来解决可变参数的解包问题。void print(){} //处理边界template <class First, class ... Rest>void print(First first_arg, Rest...rest_args){ co原创 2022-02-20 00:13:45 · 430 阅读 · 0 评论 -
C++17 (1)
目录if-initStructured Bindingsif-initC++17新增,变量可以在if条件表达式内初始化,//before C++17int p = do_something();if(p){ //...}//nowif(int p = do_something(); p){ //...}如果你的变量p仅仅在if范围内使用,那么就可以使用if-init。这样做的好处就是控制了p的生命周期和作用域,一旦离开if语句,p立刻销毁,提高了一点效率,而且你可以在下面的代码原创 2022-02-17 21:21:26 · 493 阅读 · 0 评论 -
type_traits之 析取 && 合取 && 否定
前言析取,disjunction合取,conjunction否定,negation原创 2022-02-14 17:30:54 · 906 阅读 · 0 评论 -
C++20 concept && constraint
目录前言C++20之前的做法前言C++20引入了concept,对模板参数提供约束。因为模板的接口都是隐式接口,模板的要求也是隐式的,需要你深入模板去查看模板究竟需要哪些限制。而concept显化了对类型的限制,在编译期就将不满足的实例化剔除。假设我们想要用可变参数实现一个sum求和函数,求若干个对象的和,像下面这样:template <class...Args>auto sum(Args ... args) noexcept{ return (... + args); //C+原创 2022-02-03 12:34:27 · 1375 阅读 · 0 评论 -
C++重载决议
目录前言一些与overload易混淆的概念override运算符重载为什么需要重载决议?声明函数重载什么是重载决议?什么不是函数重载?重载决议之过程函数重载 && 函数模板before 重载决议more detailstype conversion(类型转换)rank(排名)其他两个排名解决ambiguous function call当最佳匹配不是你想要的前言这篇博客用来总结overload resolution,这是一篇关于重载决议的演讲,very nice。一些与overload原创 2022-01-31 14:34:59 · 2612 阅读 · 5 评论 -
modern C++ (1)
文章目录前言constexpr一个有意思的地方constexpr作用于函数if constexpr前言这是一个系列文章。C++是一个随时代发展的语言,大量的语法封装让它显得它有点肥胖,让人望洋兴叹。但是这并不妨碍我们来学习它的新东西,学习C++对效率的极致追求。有些语法或关键字你可能早已熟悉,我想说的是,这个系列文章尽量只讲新东西,换句话说,如果你看见某些熟悉的语法时,不要急着跳过,因为C++有可能将这个语法拓展了新的东西,比如auto在C++14之前不支持推导函数返回值,但是在C++14之后可以这.原创 2021-08-19 16:53:40 · 365 阅读 · 0 评论