c++26新功能——gcc15.1的支持

从C98到C26:C++语言的演变与进步 从C++98到C++26,C++经历了多次重大变革,每一次更新都致力于解决开发者面临的实际问题,并适应不断变化的技术环境。无论是早期的面向对象编程,还是后来的泛型编程、多线程支持和模块化设计,C++始终保持着其作为一门强大而灵活的语言的地位。对于开发者来说,了解这些变化不仅能帮助我们更好地掌握这门语言,还能让我们在项目中充分利用其最新特性,从而编写出更高效、更安全的代码。未来,C++仍将在软件开发领域发挥重要作用,值得我们持续关注和学习。 阅读详情
AI摘要

本文介绍了C++标准与编译器的关系,主流C++编译器有微软的MSVC、开源的GCC和CLANG+LLVM等。重点阐述了GCC15.1对C++26的支持,包括Pack indexing、Attributes for structured bindings等15项功能,还提及对C++23、C++20的支持情况,指出新标准落地依赖编译器不断迭代。

一、编译器和C++标准

大家都知道,c++标准是不断推陈出新的,但标准的制定无论快慢,总是有一个日期。而在这个日期之前,所有的相关文档都可能是未决的或者理解为都有可能出现变化。而C++标准只是标准,真正的实践于应用之中,需要相关的编译器厂商的跟进和支持。这就是常说的一流的企业做标准(虽然用在这里不是特别贴切)。
目前主流的C++编译器基本是以开闭源划分的。从整体上来看,有三大类编译器即微软的MSVC、开源的GCC和CLANG+LLVM.当然,具体到一些具体的情况,国内外的一些大公司也有自己的编译器而且还做得不错,也有一些开源的小众的编译器。比如前面提到的Intel的C++编译器以及IBM公司的XL编译器等,如果大家有印象,原来的Borland C++编译器应该也听说过。
正如前面所讲,标准是标准,编译器是编译器,二者既统一又有分歧,不时的对标准做一些细节的修改或夹带一些私货这都是正常的。

二、gcc15.1对C++26的支持

GCC15.1已经在4月25日发布,整体上来看,此版本的进行了一次较大的升级,对软硬件的支持都有了很大的增加。包括Rust、Cobol以及Fortran等的支持都有不小的惊喜。此处只讨论对c++的支持。
GCC15.1对c++23的支持几乎已经完成,但仍然有一些细节上待完善的地方,不过,似乎GDB没有跟上,可能会有一些问题。也就是说,这个版本对C++23和c++26的支持仍然是实验性质的(甚至c++20也是,GCC16会切换到C++20),这个大家一定要引起注意。
GCC15.1对c++26的支持主要包括:
1、Pack indexing
它主要应用于模板编程中,特别在元编程中,对于从模板的参数包中取出参数,有了它就变得简单不少,看代码:

//原有方式处理参数
template<typename T, typename... Types>
void print (T t, Types... args)
{
  std::cout << t << '\n';
  if constexpr (sizeof...(args) > 0)
    print (args...);
}

int main ()
{
  print ('a', "foo", 42);
}
//使用Pack Indexing
template<typename... Types>
void print (Types... args)
{
  std::cout << args...[0] << '\n';
}

int main ()
{
  print ('a', "foo", 42);
}

注意,空包不能索引,不过未来会不会有什么处理,还真不好说。
2、Attributes for structured bindings
支持属性的结构化绑定,见代码:

struct S { int a, b; };

void
g (S& s)
{
  auto [ a, b [[gnu::deprecated]] ] = s;
}

3、=delete with a reason
这个就是更人性化,对默认删除的函数可以增加注释,如代码:

void oldfn(char *) = delete("unsafe, use newfn");
void newfn(char *);

void g ()
{
  oldfn ("bagel");
}

4、Variadic friends
friend对变参的支持,这个不做过多说明,见代码:

template<class... Ts>
class Foo {
  friend Ts...;
};

5、constexpr placement new
这个好理解,就是对constexpr的功能进一步完善,支持placement new,看代码:

#include <memory>

constexpr int foo ()
{
  std::allocator<int> alloc;
  auto p = alloc.allocate (16);
  new (p) int(42);
  alloc.deallocate (p, 16);
  return 1;
}

int main ()
{
  constexpr int r = foo ();
}

6、Structured binding declaration as a condition
此项即是地一步扩大的了结构绑定的范围,包括使用一些条件语句,如if,switch,for和while,见代码:

struct S {
  int a, b;
  explicit operator bool () const noexcept { return a != b; }
};
void use (int, int);

void g (S s)
{
  if (auto [ a, b ] = s)
    use (a, b);
}

7、Deleting a pointer to an incomplete type
这项主要是让代码更安全,提高了编译处理的级别,即对不完全类型编译从警告提高到错误,如下的代码在C++26中会报一个错误:

struct S;

void foo (S *p)
{
  delete p;
}

9、The Oxford variadic comma
这个其实就是让代码更严谨一些,不容易产生歧义,规范了逗号的应用,见下的代码:

void d_depr(auto......); // deprecated
void d_okay(auto..., ...);  // OK

void g_depr(int...);     // deprecated
void g_okay(int, ...);   // OK

void h_depr(int x...);   // deprecated
void h_okay(int x, ...); // OK

10、Remove deprecated array comparison
就是把老版本C++20中认为丢弃的数组比较给彻底扔出了标准
11、embed
这个功能有点类似于汇编的嵌入,不过此处是二进制代码的嵌入。
12、Redeclaration of using-declarations
就是支持在类外进行重复的声明,下面的代码在GCC14中会编译报错:

enum class E { Smashing, Pumpkins };
void foo() {
  using E::Smashing;
  using E::Smashing;
  using E::Pumpkins;
}

13、Bit-fields and narrowing conversions
此功能是进一步处理位字段情况下的细节,见代码:

#include <compare>

struct C {
  long long i : 8;
};

void f() {
  C x{1}, y{2};
  x.i <=> y.i; // OK
}

14、Overloaded functions and constraints
这个功能其实就是将约束和重载进行更清晰的处理,见下面的代码:

template<bool B> struct X {
  static void f(short) requires B; // #1
  static void f(short);            // #2
};
void test() {
  auto x = &X<true>::f;     // OK, deduces void(*)(short), selects #1
  auto y = &X<false>::f;    // OK, deduces void(*)(short), selects #2
}

15、对一些问题的修复和细节的完善以及对一些重要功能的引入
这其中包括C++26、C++23和c++20等的修改完善,最重要的是极大的增强了开发者一直期待的module std;

三、总结

其实C++新标准的落地,最重要的还是看编译器的支持。即使会有一些小的惊喜,但整体上,编译器对新标准的支持需要不断的迭代才可能完成。特别是面临一些重大标准的推进,可能有较多的基础库需要更新,这就使得编译器自身的更新迭代无论从时间还是工作量上都增加不少的难度。
但新的终究会来,老的终将故去。与诸君共勉!

深入GCC源码:解析C++26模块与反射机制的实现原理 C++模块化编程是现代C++演进的核心方向,旨在通过模块(Modules)机制替代传统的头文件包含(#include),从根本上解决编译速度慢、宏污染和接口隔离等问题。其原理在于编译器将模块接口序列化为二进制模块接口(BMI)文件,实现一次解析、多次复用,大幅提升构建效率。这一技术价值不仅体现在编译加速上,更在于为大型工程提供了更清晰的物理架构和更强的封装性。在应用场景上,模块化特性正逐步从C++20向C++26演进,并与反射(Reflection)等新特性深度集成,为元编程和代码生成开辟了新路径。本文以G 阅读详情

相关推荐

《Qt C++ 项目中升级 GCC 版本的完整指南》

升级 GCC 后,Qt 项目通常能获得更好的性能和新特性支持,但需要仔细处理工具链配置和兼容性问题。建议在升级前备份项目,并在开发环境中进行充分测试。

zheng_ruiguo的专栏 1093

c++26有什么新功能

c++26有什么新但功能

xie__jin__cheng的博客 3523

ubuntu20.4源码安装最新gcc(gcc V12.2)

Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新gcc12.2版本源码,并进行本地编译、安装。本节内容包括gcc12.2的必备库安装和gcc12.2安装两部分内容组成。

q544344318的博客 1万+

GCC 15.1 发布,包含 COBOL 编译器及多项其他改进

GCC 15.1 已于近日发布,这是 GCC 15 的首个稳定版本。新版本带来了 COBOL 编译器前端、多项 C 和 C++ 语言支持改进、对新 CPU 和 ISA 功能的支持、更强大的 Rust 编程语言支持、调试增强功能等。此外,Fedora 42 已经是首个在生产环境中搭载 GCC 15 的主流 Linux 发行版,使用了接近最终版本的 GCC 151。

xixixixixixixi21的博客 1797

Ubuntu 24.04 LTS 安装 GCC 15 全攻略:从源码编译到多版本切换(附国内镜像加速)

本文详细介绍了在Ubuntu 24.04 LTS系统上从源码编译安装最新GCC 15编译器的完整流程。针对国内网络环境,提供了使用镜像加速获取源码的实用策略,并重点讲解了如何通过配置参数解决依赖和编译错误,最后利用update-alternatives工具实现与系统原生GCC版本的无缝切换和灵活管理,为开发者构建前沿C++开发环境提供一站式解决方案。

root9的博客 599

【多元统计分析】均值向量和协方差阵的检验——spss上机实验

均值向量和协方差阵的检验——spss上机实验 #参考书目为《多元统计分析》(第五版)——何晓群.中国人民大学出版社 #如有错误,请指正!谢谢~ #关注公众号搜索同名文章获取数据~ 习题2.3 现选取内蒙古、广西、贵州、云南、西藏、宁夏、新疆、甘肃和青海等9个内陆边远省区。选取人均GDP、第三产业比重、人均消费支出、人口自然增长率及文盲半文盲人口占15岁以上人口的比例等5项能较好的说明各地区社会经济发展水平的指标,验证边远及少数民族聚居区的社会经济发展水平与全国平均水平间有无显著差异。 将输入导入spss

suansuannainaizi的博客 3万+

解锁 C++26 的未来:从语言标准演进到实战突破

C++26 不仅是语言标准的迭代,更是一场编程范式的革命。其并发模型的精细化控制、代码契约的形式化验证、静态反射的元编程能力,将重塑高性能计算、AI 工程化、量子模拟等领域的开发模式。对于开发者而言,掌握 C++26 的核心特性,意味着在系统级编程的制高点上,继续引领技术潮流。

2501_90200491的博客 2464

企业网络改造必看:如何用华为S5700三层交换机解决多部门隔离通信?

本文详细介绍了如何利用华为S5700三层交换机解决企业多部门网络隔离与通信需求。通过划分VLAN实现逻辑隔离,并配置三层路由实现受控互通,结合ACL进行精细访问控制,构建安全高效的企业网络。文章提供了从拓扑规划、地址分配到核心配置的完整实战指南。

weixin_29260291的博客 262

跟我学c++高级篇——C++26反射预览

看了c++26中的提案,可以发现其实很多现在的反射框架的轮子基本都可以废弃了。不过,能把反射最终支持,估计得2028年左右了,时间还有的是。喜欢造轮子的同学可以继续造,反正在造轮子的过程中,可以更好的学习反射的原理和实践,同样能更好的理解新标准中的反射。这样,在未来的应用中,也会更加轻松的引入标准库内的反射。在后面反射实现分析讲解中,基本也会沿着大致相同的路线进行。

fpcc的专栏 4060

AI Agent技能评测框架SkillsBench:从黑盒评估到白盒技能拆解

在人工智能领域,模型评估是衡量技术进展的核心环节。传统评测基准如GLUE、MMLU主要关注模型的通用认知能力,但实际工程应用中,AI Agent需要的是在复杂场景中协调多种能力的“职业技能”。SkillsBench创新性地将Agent能力进行原子化拆解,定义了理解规划、工具调用、推理决策、交互安全等技能维度,并通过领域专家构建的评测集确保生态效度。这一框架为Agent开发提供了精准的“度量衡”,使性能优化从经验驱动转向数据驱动,同时为不同模型和框架提供了公平比较的基础,推动了AI Agent生态从“野蛮生长

weixin_30530339的博客 389

机器学习扩散模型简介

​ 扩散模型是生成模型,在过去几年中越来越受欢迎,这是有充分理由的。仅在 2020 年代发布的几篇开创性论文就向世界展示了 Diffusion 模型的能力,例如在图像合成方面击败 GAN[6]。最近,从业者将看到DALL-E 2(OpenAI 上个月发布的图像生成模型)中使用的扩散模型。

gongdiwudu的专栏 4268

【C++26模块化革命】:GCC如何重塑现代C++开发效率?

提升C++开发效率新途径,深入解析C++26模块的GCC实现原理与应用实践。涵盖模块化编译、头文件替换、构建速度优化等关键优势,适用于大型项目与跨平台开发。掌握下一代C++工程架构,值得收藏。

simcode的专栏 1022

Leads、SDR、MQL、SQL、L2C术语概念,线索创建与清洗、线索分级模型、线索流转策略、线索的统计与分析

CRM中的“Leads”是什么?笔者在文中不仅较为全面地介绍了相关术语概念,还分析了线索的创建与清洗、线索的分级模型、线索流转策略以及线索的统计与分析。

盼盼学士 5960

GCC 14如何实现C++26反射(深度剖析编译器底层机制)

深入解析GCC 14如何实现C++26反射支持,揭示编译器底层的元编程机制。涵盖类型查询、属性遍历等核心方法,适用于代码生成与序列化场景,提升开发效率。技术深度与实用价值兼具,值得收藏。

PixelIsle的博客 1009

爬取Unsplash高清壁纸:Python爬虫实战教程(最新技术)

在当今数字化时代,高清壁纸已经成为人们个性化设备的重要元素。Unsplash作为全球最知名的免费高质量图片网站,汇集了数百万张由全球摄影师贡献的高清图片。然而,Unsplash官网的下载方式需要手动操作,对于需要批量下载壁纸的用户来说效率较低。本文将带你深入探索如何使用Python爬虫技术高效爬取Unsplash高清壁纸,从基础到进阶,全面掌握图片爬取的核心技术。Unsplash成立于2013年,是一个完全免费的图片分享平台。高质量内容:所有图片均由专业摄影师上传,分辨率普遍达到4K以上免费商用。

2201_76125261的博客 936

浅聊开关电源6:大学生电赛(电源类)之LCL并网滤波器设计(PCB设计,STM32F4xx程序与Simulink仿真)

关于LCL并网滤波器设计的一些小分享

xjtuymh的博客 3654

Xmake 项目中 GCC 15.1 导入 std 模块问题的解决方案

Xmake 项目中 GCC 15.1 导入 std 模块问题的解决方案 【免费下载链接】xmake ???? 一个基于 Lua 的轻量级跨平台构建工具 项目地址: https://gitcode.com/xmake-io/xmake ...

gitblog_01403的博客 550

vue2 - elementUI表格table树形结构复选框勾选父子联动示例,el-table树状表格tree复选框checkbox多选框全选/反选取消children(当子级全选中,父级自动勾选)

vue2,elementui,el-table树状表格多选,树形结构结合多选框使用,实现单选父子联动全选反选,勾选联动父级勾选,表格多选check父子联动,table表格children如何嵌入复选框,el-table使用多选框与树形数据写一个有半选全选功能的表格,el-table树形表格实现复选框多选效果,表格树状结构多选,每一个row都可以选中并且联动全选按钮,table选父带子选子带父,树形数据与懒加载,Table表格树形结构多选框选中父级时会选中子级,elementUI表格里树形结构嵌套复选框全选全

✅ 精选推荐文章 1万+

C++未来已来(Clang 17全面支持C++26新特性曝光)

掌握C++26新特性,从Clang 17 C++26 特性测试开始。本文详解编译器支持现状、实验性功能启用方法及实际应用场景,助开发者提前体验协程改进、模式匹配等前沿特性,提升代码效率与可读性,值得收藏。

StepLens的博客 931

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++26模块化已来,你的VSCode准备好了吗?不升级将被淘汰

掌握VSCode C++26模块化的兼容性,轻松应对现代C++开发。本文详解配置方法、适用场景与编译器支持情况,提升构建效率与代码维护性。解决模块化项目搭建难题,助力开发者无缝迁移,值得收藏。

BytePulse的博客 1086

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【C++】GCC和Visual Studio编译器与C++标准对应关系

c++常用的编译场景一般是linux或windows,linux通常使用Mingw中的gcc/g++编译器,Windows通常使用visual studio IDE中的微软编译器,随着c++11及以上标准的普及,再编译器遇到这些新特性的时候,如果编译器版本过低,那么会出现编译失败的情况,虽然在日常学习中通常都会下载和使用高版本的编译器,但是在工作中,如果遇到一些特殊行业只能使用特定版本编译器,或者需要对一些压箱底的老项目进行编译,选择合适的编译器版本就很重要。

qq_35902025的博客 6491

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C23和C++26的#embed嵌入资源指南

c++26最近刚敲定标准,新增了许多重量级特性。不过目前能实际上手测试的特性不多,毕竟标准刚刚确定,比较大的变更里只有“资源嵌入”或者用标准文档里英文名“resource inclusion”这个新特性可以尝鲜。虽然这篇文章标题叫指南,但实际上更像实验记录,而且现在属于早期阶段编译器对资源嵌入的处理有可能会有改变(不过语法不会改了),所以把这篇文章当教程看也行但得注意文章内容与实际使用上可能存在差别。网站上显示GCC15是完全支持#embed。

cOg4o7KMN的博客 193

GCC配置C++20模块实战:从源码构建到标准库模块生成

C++模块化编程是C++20引入的核心特性,旨在通过模块接口单元(MIU)替代传统的头文件包含机制,从根本上解决编译速度慢、宏污染和依赖管理混乱等问题。其技术原理在于将模块接口预编译为二进制格式的.gcm文件,实现一次编译、多次复用,从而显著提升大型项目的构建效率。这一特性对于现代C++工程实践具有重要价值,尤其在追求编译性能和代码隔离性的场景下。然而,当前主流编译器对C++20模块的支持仍处于演进阶段,其中GCC的配置过程涉及版本选择、编译标志启用和标准库模块文件生成等关键步骤。本文聚焦于GCC编译器的实

weixin_30873847的博客 511

Clang 17编译C++26失败?90%开发者忽略的3个关键配置项

解决Clang 17编译C++26失败问题,揭秘90%开发者忽略的3个关键配置项。涵盖编译器标志、标准库选择与构建系统适配,提升兼容性与编译效率。适用于前沿C++特性开发场景,值得收藏

FuncInk的博客 1036

大QMT实时行情推送教程:xtquant_big_convert的subscribe_whole_quote如何实现零丢失增量推送

**xtquant_big_convert** 是把大 QMT 接口远程化、并兼容 MiniQMT(xtquant)方法名的桥接工具。本文带你用它内置的 `subscribe_whole_quote` 真推送能力,实现「订阅即收、增量更新、断线自愈」的大QMT实时行情推送,并解析它为何能做到零丢失、零乱序。 ## 一、为什么实时行情推送很难做对? 普通用户写量化程序时,行情获取通常有两种姿势:

gitblog_00149的博客 237

VSCode下C++26模块化项目实战(从零搭建到高效编译)

掌握VSCode下C++26模块化的编译任务,轻松搭建现代化C++开发环境。适用于大型项目模块化管理,通过配置tasks.json与cmake实现高效编译。提升代码组织与构建效率,告别传统头文件冗余,值得收藏。

VarFlow的博客 787
上一篇: c++26新功能——std::execution
下一篇: c++26新功能——Pack indexing
fpcc
fpcc 新星创作者: C/C++技术领域 新星创作者: C/C++技术领域
博客等级 码龄22年 4041粉丝 1189原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值