首页/新闻资讯/正文详情

C++现代教程五

发布时间:2026/11/11 13:27:43 来源:云帆数科 栏目:资讯中心
C++现代教程五
#pragma once _Pragma(once) # C/C混合编程 #ifdef __cplusplus extern C { #endif // 一些c代码 #ifdef __cplusplus } #endif # 继承构造 struct A { A(int i) {} A(double d,int i){} A(float f,int i,const char* c){} //...等等系列的构造函数版本 } old: struct B:A { B(int i):A(i){} B(double d,int i):A(d,i){} B(folat f,int i,const char* c):A(f,i,e){} //......等等好多个和基类构造函数对应的构造函数 } new: struct B:A { using A::A; //关于基类各构造函数的继承一句话搞定 //...... } #regex std::regex base_regex(([a-z])\\.txt); std::smatch base_match; for(const auto fname: fnames) { if (std::regex_match(fname, base_match, base_regex)) { // sub_match 的第一个元素匹配整个字符串 // sub_match 的第二个元素匹配了第一个括号表达式 if (base_match.size() 2) { std::string base base_match[1].str(); std::cout sub-match[0]: base_match[0].str() std::endl; std::cout fname sub-match[1]: base std::endl; } } } #Variadic templates // C11 template typename First, typename... Args auto sum(const First first, const Args... args) - decltype(first) { const auto values {first, args...}; return std::accumulate(values.begin(), values.end(), First{0}); } // C17 template typename... Args auto sum(Args... args) { // Unary folding. return (... args); } template typename... Args bool logicalAnd(Args... args) { // Binary folding. return (true ... args); } bool b true; bool b2 b; logicalAnd(b, b2, true); // true #Inline namespaces namespace Program { namespace Version1 { int getVersion() { return 1; } bool isFirstVersion() { return true; } } inline namespace Version2 { int getVersion() { return 2; } } } int version {Program::getVersion()}; // Uses getVersion() from Version2 int oldVersion {Program::Version1::getVersion()}; // Uses getVersion() from Version1 bool firstVersion {Program::isFirstVersion()}; // Does not compile when Version2 is added # std::move temp struct Bar { int a 1; }; struct Foo { Bar getBar() { return bar; } Bar getBar() const { return Bar{}; } Bar getBar() { return std::move(Bar{}); } private: Bar bar; }; Foo foo; auto ref foo.getBar(); ref.a 10; # Nested namespaces namespace A::B::C { int i; } # __has_include #ifdef __has_include # if __has_include(optional) # include optional # define have_optional 1 # elif __has_include(experimental/optional) # include experimental/optional # define have_optional 1 # define experimental_optional # else # define have_optional 0 # endif #endif # std::invoke template typename Callable class Proxy { Callable c_; public: Proxy(Callable c) : c_{ std::move(c) } {} template typename... Args decltype(auto) operator()(Args... args) { // ... return std::invoke(c_, std::forwardArgs(args)...); } }; const auto add [](int x, int y) { return x y; }; Proxy p{ add }; p(1, 2); // 3 # std::clamp limitRange std::clamp(0, -1, 1, std::less{}); // 0 # std::reduce const std::arrayint, 3 a{ 1, 2, 3 }; std::reduce(std::cbegin(a), std::cend(a)); // 6 default binary operation is std::plus // Using a custom binary op: std::reduce(std::cbegin(a), std::cend(a), 1, std::multiplies{}); // 6 const std::arrayint, 3 b{ 1, 2, 3 }; const auto product_times_ten [](const auto a, const auto b) { return a * b * 10; }; std::transform_reduce(std::cbegin(a), std::cend(a), std::cbegin(b), 0, std::plus{}, product_times_ten); // 140 # std::inclusive_scan const std::arrayint, 3 a{ 1, 2, 3 }; std::inclusive_scan(std::cbegin(a), std::cend(a), std::ostream_iteratorint{ std::cout, }, std::plus{}); // 1 3 6 std::exclusive_scan(std::cbegin(a), std::cend(a), std::ostream_iteratorint{ std::cout, }, 0, std::plus{}); // 0 1 3 const auto times_ten [](const auto n) { return n * 10; }; std::transform_inclusive_scan(std::cbegin(a), std::cend(a), std::ostream_iteratorint{ std::cout, }, std::plus{}, times_ten); // 10 30 60 std::transform_exclusive_scan(std::cbegin(a), std::cend(a), std::ostream_iteratorint{ std::cout, }, 0, std::plus{}, times_ten); // 0 10 30 # GCD and LCM 公倍数 const int p 9; const int q 3; std::gcd(p, q); // 3 std::lcm(p, q); // 9 # std::not_fn # C20 Coroutines generatorint range(int start, int end) { while (start end) { co_yield start; start; } // Implicit co_return at the end of this function: // co_return; } for (int n : range(0, 10)) { std::cout n std::endl; } # concept template typename T concept unsigned_integral integralT !signed_integralT; template typename T concept callable requires (T f) { f(); }; // T is a constrained type template parameter. template typename T requires my_conceptT void f(T v); # [[likely]] and [[unlikely]] attributes switch (n) { case 1: // ... break; [[likely]] case 2: // n 2 is considered to be arbitrarily more // ... // likely than any other value of n break; } int random get_random_number_between_x_and_y(0, 3); if (random 0) [[likely]] { // body of if statement // ... } # constexpr virtual functions struct X1 { virtual int f() const 0; }; struct X2: public X1 { constexpr virtual int f() const { return 2; } }; # explicit(bool) struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template typename T explicit(!std::is_integral_vT) foo(T) {} }; # enum enum class rgba_color_channel { red, green, blue, alpha }; std::string_view to_string(rgba_color_channel my_channel) { switch (my_channel) { using enum rgba_color_channel; case red: return red; case green: return green; case blue: return blue; case alpha: return alpha; } } # constinit const char* g() { return dynamic initialization; } constexpr const char* f(bool p) { return p ? constant initializer : g(); } constinit const char* c f(true); // OK constinit const char* d f(false); // ERROR: g is not constexpr, so d cannot be evaluated at compile-time. # std::span std::spanconst int, 3{ c.cbegin(), c.cend() } # Bit operations std::popcount(0u); // 0 std::popcount(1u); // 1 std::popcount(0b11110000u); // 4 # Math constants std::numbers::pi; // 3.14159... std::numbers::e; // 2.71828.. # starts_with and ends_with on strings std::string str foobar; str.starts_with(foo); // true str.ends_with(baz); // false # std::midpoint std::midpoint(1, 3); // 2 # std::to_array int a[] {1, 2, 3}; std::to_array(a); // returns std::arrayint, 3C现代教程四_c float 转 string-CSDN博客创作不易小小的支持一下吧

相关推荐

ios 怎么使用虚拟相机替代实时拍照?
ios 怎么使用虚拟相机替代实时拍照?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 2:15:24

C HTML格式解析与生成
C HTML格式解析与生成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 2:46:40

nuclei-templates 快速上手指南:从模板库挑对规则,给资产做一次安全体检
nuclei-templates 快速上手指南:从模板库挑对规则,给资产做一次安全体检

nuclei-templates 快速上手指南:从模板库挑对规则,给资产做一次安全体检 【免费下载链接】nuclei-templates Community curated list of templates for the nuclei engine to find security vulnerabilities. 项目地址: https://gitcode.com/GitHub_Tr… · 2026/11/10 1:21:26

邯郸河北电工证焊工证考不过怕白交钱?官方报名入口这样用最稳妥
邯郸河北电工证焊工证考不过怕白交钱?官方报名入口这样用最稳妥

邯郸河北电工证焊工证考不过怕白交钱?官方报名入口这样用最稳妥 怕考不过白交培训费?邯郸河北电工证焊工证考试别踩坑,官方报名入口用对了,一步到位。… · 2026/11/11 13:27:39

泰州高港电工证电子证书怎么查?工地太忙根本没时间复习考试
泰州高港电工证电子证书怎么查?工地太忙根本没时间复习考试

泰州高港电工证电子证书怎么查?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。尤其是像泰州高港这样的区域,电工证考试和复审成为了很多从业者不得不面对的问题。随着 电子证书… · 2026/11/11 13:27:39

雄县低压电工证培训保姆级教程:工地太忙根本没时间复习考试
雄县低压电工证培训保姆级教程:工地太忙根本没时间复习考试

雄县低压电工证培训保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是无数一线电工师傅的共同心声。特别是在雄县这样的建筑大县,低压电工证不仅是上岗的“入场券”,更是工资涨、项目稳、机会多的关键。可偏偏这个证,不是谁都能顺… · 2026/11/11 13:27:39

甘肃高压电工证查询千万别踩坑,外省证能转吗?看看真实流程
甘肃高压电工证查询千万别踩坑,外省证能转吗?看看真实流程

甘肃高压电工证查询千万别踩坑,外省证能转吗?看看真实流程 之前考的证在外省能不能转过来?这个问题困扰了很多人,尤其是像你这样在焦作转岗、想要在甘肃继续从事高压电工工作的朋友。现在不少人都在问【甘肃高压电工证查询】,但一不小心就容易踩坑,比如… · 2026/11/11 13:27:39

南阳市哪有考电工证的官方回应:实操考试心里没底怕挂科
南阳市哪有考电工证的官方回应:实操考试心里没底怕挂科

南阳市哪有考电工证的官方回应:实操考试心里没底怕挂科 实操考试心里没底怕挂科?南阳市哪有考电工证的官方回应来了,别再被中介忽悠。很多人在报考电工证时,最怕的就是实操考试不过,耽误时间又花冤枉钱。而南阳市作为河南中部的重要城市,特种作业操作证… · 2026/11/11 13:27:39

邢职毕业有电工证吗?网上查询报名渠道别走弯路
邢职毕业有电工证吗?网上查询报名渠道别走弯路

邢职毕业有电工证吗?网上查询报名渠道别走弯路 你是不是也这样,拿着毕业证却不知道怎么考电工证?怕被中介坑?别急,这篇讲透邢职毕业有电工证吗、网上查询报名、信阳房建工程从业者的报考攻略。 ### 邢职毕业有电工证吗?证书怎么考?… · 2026/11/11 13:26:39

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43

_中职电工证最新政策解读
_中职电工证最新政策解读

中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52

昆明电工证培训价格值不值得考?老电工告诉你真相
昆明电工证培训价格值不值得考?老电工告诉你真相

昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52

特种电缆张工网上查询全攻略:外省证如何转过来
特种电缆张工网上查询全攻略:外省证如何转过来

特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码