c++关键字default和deleted

【C++11保姆级教程】delete和default关键字 欢迎来到本教程,今天我们将学习C++11中的两个关键字:delete和default。这两个关键字为我们提供了更清晰和更灵活的方式来控制类的默认行为。无论您是初学者还是有经验的开发人员,本教程都将以通俗易懂的语言解释这两个关键字的概念和用法。让我们开始吧!在C++11中,delete关键字可以用于删除类的特殊成员函数或禁止使用特定的函数。通过使用delete关键字,我们可以明确地告诉编译器某个函数是禁止的,从而防止使用者无意中调用它们。注意:是类中的成员函数或禁止使用特定的函数,不要放错了地方。 阅读详情

1)C++入门级小知识,分享给将要学习或者正在学习C++开发的同学。

2)内容属于原创,若转载,请说明出处。

3)提供相关问题有偿答疑和支持。

default关键字:
背景问题:
C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、默认析构函数、默认拷贝构造函数以及默认拷贝赋值运算符。
这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,
而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一个默认的特殊成员函数。


清单1:
class X{
private:
int a;
};
X x;


在清单 1 中,程序员并没有定义类 X 的默认构造函数,但是在创建类 X 的对象 x 的时候,又需要用到类 X 的默认构造函数,此时,编译器会隐式的为类 X 生成一个默认构造函数。
该自动生成的默认构造函数没有参数,包含一个空的函数体,即 X::X(){ }。虽然自动生成的默认构造函数仅有一个空函数体,但是它仍可用来成功创建类 X 的对象 x,清单 1 也可以编译通过。

但是,如果程序员为类 X 显式的自定义了非默认构造函数,却没有定义默认构造函数的时候,清单 2 将会出现编译错误:


清单2:
class X{
public:
X(int i){
   a = i;
}     
private:
int a;
};
X x;  // 错误 , 默认构造函数 X::X() 不存在


清单 2 编译出错的原因在于类 X 已经有了用户自定义的构造函数,所以编译器将不再会为它隐式的生成默认构造函数。
如果需要用到默认构造函数来创建类的对象时,程序员必须自己显式的定义默认构造函数。例如:


清单 3
class X{
public:
X(){};  // 手动定义默认构造函数
X(int i){
   a = i;
}     
private:
int a;
};
X x;   // 正确,默认构造函数 X::X() 存在

从清单 3 可以看出,原本期望编译器自动生成的默认构造函数需要程序员手动编写了,即程序员的工作量加大了。
此外,手动编写的默认构造函数的代码执行效率比编译器自动生成的默认构造函数低。类的其它几类特殊成员函数也和默认构造函数一样,
当存在用户自定义的特殊成员函数时,编译器将不会隐式的自动生成默认特殊成员函数,而需要程序员手动编写,加大了程序员的工作量。
类似的,手动编写的特殊成员函数的代码执行效率比编译器自动生成的特殊成员函数低。


Defaulted 函数的提出
为了解决如清单 3 所示的两个问题:1. 减轻程序员的编程工作量;2. 获得编译器自动生成的默认特殊成员函数的高的代码执行效率,C++11 标准引入了一个新特性:defaulted 函数。
程序员只需在函数声明后加上“=default;”,就可将该函数声明为 defaulted 函数,编译器将为显式声明的 defaulted 函数自动生成函数体。例如:

清单 4
class X{
public:
X()= default;
X(int i){
   a = i;
}     
private:
int a;
};
X x;


在清单 4 中,编译器会自动生成默认构造函数 X::X(){},该函数可以比用户自己定义的默认构造函数获得更高的代码效率。

Defaulted 函数特性仅适用于类的特殊成员函数,且该特殊成员函数没有默认参数。
如下是错误的:
class X {
public:
int f() = default;      // 错误 , 函数 f() 非类 X 的特殊成员函数
X(int) = default;       // 错误 , 构造函数 X(int, int) 非 X 的特殊成员函数
X(int = 1) = default;   // 错误 , 默认构造函数 X(int=1) 含有默认参数
};

Defaulted 函数既可以在类体里(inline)定义,也可以在类体外(out-of-line)定义。例如:


清单 5
class X{
public:  
  X() = default; //Inline defaulted 默认构造函数
  X(const X&);
  X& operator = (const X&);
  ~X() = default;  //Inline defaulted 析构函数
};
X::X(const X&) = default;  //Out-of-line defaulted 拷贝构造函数
X& X::operator = (const X&) = default;     //Out-of-line defaulted // 拷贝赋值操作符


另外的一个问题是,我们知道在多态的时候往往将基类的析构函数声明为虚函数,目的是防止内存泄漏:
class X {
public:
virtual ~X(){};     // 手动定义虚析构函数
private:
int x;
};
class Y: public X {
private:
int y;
};
int main(){
X* x = new Y;
delete x;
}
程序员需要手动的编写基类的虚构函数的定义(哪怕函数体是空的),增加了程序员的编程工作量。更值得一提的是,手动定义的析构函数的代码执行效率要低于编译器自动生成的析构函数。
为了解决上述问题,我们可以将基类的虚析构函数声明为 defaulted 函数,这样就可以显式的指定编译器为该函数自动生成函数体。例如:
class X {
public:
virtual ~X()= defaulted; // 编译器自动生成 defaulted 函数定义体
private:
int x;
};
class Y: public X {
private:
int y;
};
int main(){
X* x = new Y;
delete x;
编译器会自动生成虚析构函数 virtual X::X(){},该函数比用户自己定义的虚析构函数具有更高的代码执行效率。

deleted关键字:
背景问题:
对于 C++ 的类,如果程序员没有为其定义特殊成员函数,那么在需要用到某个特殊成员函数的时候,编译器会隐式的自动生成一个默认的特殊成员函数,
比如拷贝构造函数,或者拷贝赋值操作符。例如:

清单 10
class X{
public:
X();
};
int main(){
X x1;
X x2=x1;   // 正确,调用编译器隐式生成的默认拷贝构造函数
X x3;
x3=x1;     // 正确,调用编译器隐式生成的默认拷贝赋值操作符
}


在清单 10 中,程序员不需要自己手动编写拷贝构造函数以及拷贝赋值操作符,
依靠编译器自动生成的默认拷贝构造函数以及拷贝赋值操作符就可以实现类对象的拷贝和赋值。这在某些情况下是非常方便省事的,
但是在某些情况下,假设我们不允许发生类对象之间的拷贝和赋值,可是又无法阻止编译器隐式自动生成默认的拷贝构造函数以及拷贝赋值操作符,那这就成为一个问题了。

Deleted 函数的提出
为了能够让程序员显式的禁用某个函数,C++11 标准引入了一个新特性:deleted 函数。程序员只需在函数声明后加上“=delete;”,就可将该函数禁用。
例如,我们可以将类 X 的拷贝构造函数以及拷贝赋值操作符声明为 deleted 函数,就可以禁止类 X 对象之间的拷贝和赋值。

清单 11
class X{            
     public:
       X();
       X(const X&) = delete;  // 声明拷贝构造函数为 deleted 函数
       X& operator = (const X &) = delete; // 声明拷贝赋值操作符为 deleted 函数
     };
int main(){
  X x1;
  X x2=x1;   // 错误,拷贝构造函数被禁用
  X x3;
  x3=x1;     // 错误,拷贝赋值操作符被禁用
}


在清单 11 中,虽然只显式的禁用了一个拷贝构造函数和一个拷贝赋值操作符,但是由于编译器检测到类 X 存在用户自定义的拷贝构造函数和拷贝赋值操作符的声明,
所以不会再隐式的生成其它参数类型的拷贝构造函数或拷贝赋值操作符,也就相当于类 X 没有任何拷贝构造函数和拷贝赋值操作符,所以对象间的拷贝和赋值被完全禁止了。
这种情况一般会通过一个宏定义的形式类实现,参考之前的c++笔记,关于使用如下宏定义实现:
DISALLOW_COPY_AND_ASSIGN

C++(11):显示生成缺省函数=default C++中,编译器会默认为自定义类生成: 默认构造函数 拷贝构造函数 移动构造函数 拷贝赋值函数 移动赋值函数 析构函数 如果用户自己定义了这些函数,编译器就不会再产生默认版本: class A{ public: A(int a){} //定义了构造函数,编译器便不会生成默认构造函数 }; int main(){ A a1(0); A a; //无默认构造函数,无法编译 return 0; } C++11,可以通过=default,要求编译器产生默认版本: 阅读详情

相关推荐

C++中类的默认构造函数

在《C++中类的合成的默认构造函数2-1》和《C++中类的合成的默认构造函数2-2》中提到,如果类中没有显式地定义默认构造函数,则C++编译器会为其创造一个合成的默认构造函数,如果类中已经定义了其他格式的构造函数,此时C++编译器不会再为其合成默认构造函数。而定义类时,最好要定义其默认的构造函数。 1 使用default关键字定义默认构造函数 在C++11中,引入了default关键字来定义默认构造函数。 class MyStruct { MyStruct() = default; }; 在以

hou09tian的博客 1281

创建的函数有编译错误_C++11 中的 Defaulted 函数

对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量。Defaulted 函数背景问题C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成...

weixin_35992880的博客 487

C++笔记之关键字深度解析:default、delete、noexcept、volatile、explicit

角度说明是否只是"代码规范/习惯"?不是。它是编译器强制执行的类型安全机制真正目的防止编译器"自作聪明"地做隐式类型转换,避免因转换产生的隐藏bug、重载歧义、诡异运算未加explicit的风险代码"看似能跑",但实际上可能因隐式转换发生了非预期行为,且难以在代码审查中一眼看出现代C++实践单参数构造函数、转换运算符默认都应该加explicit,除非你确实需要设计一个"隐式转换类型"(比较少见,比如某些数值包装类)explicit不是用来"规范程序员书写习惯",而是用来。

小勇博客 77

c++类对象的初始化笔记(1)

c++ 构造函数的学习,记录

weixin_42108533的博客 765

[CTFSHOW]JWT

文章目录前言JWT简介CTFSHOW Web345CTFSHOW Web346前置知识开始做题CTFSHOW Web347CTFSHOW Web348CTFSHOW Web349CTFSHOW Web350前置知识利用WP如何防御 前言 有些师傅向我咨询WP,索性就发了吧,其实早就写好了,只是懒,在github仓库里囤着 JWT简介 可以看看我的Github总结给自己看的,Y4tacker CTFSHOW Web345 首先打开题目,查看源码,接下来访问/admin被跳转回主页啥也没有发生 where is

Y4tacker的博客 6046

从叶片之舞到数据之眼:净空雷达如何重塑风电安全与效率的边界

净空雷达通过激光或毫米波技术实现风机叶片与塔筒间距离的毫米级实时监测,极大提升了风电场在极端天气下的安全性与运营效率。这项技术不仅预防扫塔事故,还通过数据可视化与智能分析赋能叶片健康管理和发电优化,成为风电数字化运维的核心基础设施。

xk7n92h3p5m的博客 1163

[C++11]中 =delete和=default

1 =delete作用于普通函数 C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错 #include <cstdio> class TestClass { public: int func(int data)=delete; }; int main(void) { TestClass obj; obj.func(100); return

M2嵌入式 878

MagicDraw小白必看:BDD图中模块的5种属性详解(含SysML v1.6最新端口配置指南)

本文面向MagicDraw初学者,详细解析SysML BDD图中模块的五种核心结构属性,包括组成部分、引用、值、约束属性及端口。重点阐述了SysML v1.6中端口设计的范式转移,对比了完整端口与代理端口的区别与应用场景,并通过实战案例指导如何利用代理端口进行清晰的接口定义与系统架构设计。

rum55的博客 374

7月31日C++-----default和delete--stl中的end()

c++有关default和delete的内容c++17

qq_42866659的博客 325

sentaurus浪涌仿真sdevice代码解释(4)

9. `Plot(FilePrefix="Surge_n@node@" time=(Range=(0 @<0+10E-3>@) Intervals=10) NoOverWrite)`:设置了一个绘图过程,用于在瞬态分析过程中绘制结果,文件名前缀为`Surge_n@node@`,时间范围从0到`10E-3`秒,每隔10个时间点绘制一次,且不覆盖之前的结果。同样设置了最大迭代次数和线搜索阻尼系数。这个过程将模拟从`0`到`10E-3`秒内器件的行为,并且会在不同的时间点记录和绘制电流和电势的数据。

qq_52640792的博客 1660

RexUniNLU零样本通用自然语言理解:nlp_deberta_rex-uninlu_chinese-base模型实战解析

本文深入解析了RexUniNLU零样本通用自然语言理解模型(nlp_deberta_rex-uninlu_chinese-base)的实战应用。通过详细的环境配置、模型加载及实战案例,展示了该模型在零样本场景下的强大能力,如实体识别和复杂关系抽取,显著提升NLP任务效率。

weixin_29088655的博客 251

新引入关键字

c++ 11 关键字特性和使用场景

zwj9367的博客 724

PCIe5.0均衡简介(整理版)

pcie5.0 均衡 equalization

m0_53559277的博客 9110

C++笔记-C++11(三)

capture-list: 捕捉列表,该列表总是出现在 lambda 函数的开始位置,编译器根据[]来 判断接下来的代码是否为 lambda 函数,捕捉列表能够捕捉上下⽂中的变量供 lambda 函数使 ⽤,捕捉列表可以传值和传引⽤捕捉,具体细节7.2中我们再细讲。而如果写了三个函数中的一个,比如我上面写的拷贝构造函数,那么就不会生成默认的移动构造函数,而是会走Person类中的拷贝构造,进而去调用string中的拷贝构造,结果也证实了这句话,确实没有调用string中的移动构造,而是调用了拷贝构造。

m0_74824865的博客 327

【AI智能体】Codex 插件从使用到项目开发实战操作详解

Codex 插件从使用到项目开发实战操作详解

congge 7649

【YOLO11[基础]】分类任务的热力图可视化实践 | 论文必备 | 分类任务 | 即插即用 | 可选GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiR

【YOLO11[基础]】分类任务的热力图可视化实践 | 论文必备 | 分类任务 | 即插即用 | 可选GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiResCAM, LayerCAM, RandomCAM, EigenGradCAM等

静谧、淡雅 2390

C++11 之 delete 和 default

例如幕后code子类构造函数要调用父类的构造函数 转载C++11 之 delete 和 default 1  特殊成员函数   一个类,只有数据成员时 class DataOnly { private: int data_; };   C++98 编译器会隐式的产生四个函数:缺省构造函数,析构函数,拷贝构造函数 和 拷贝赋值算子,它们称为特殊成员函数 (special member function)   在 C++11 中,除了上面四个外..

oykotxuyang的博客 351

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【C++】C/C++ 中default/delete特性

C++类的特殊成员函数及default/delete特性 本文内容侧重个人理解,深入理解其原理推荐https://www.geeksforgeeks.org 目录 C++类的特殊成员函数及default/delete特性 前言 1. 构造函数和拷贝构造函数 2. 拷贝赋值运算符 3. C++11特性之default/delete 参考 前言 C++ 的类有四类特殊成员函数,分别是: 默认构造函数 析构函数 拷贝构造函数 拷贝赋值运算符 这些类的

格物致知 610

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

深度学习工具包 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")

C++11 标准新特性:Defaulted 和 Deleted 函数

https://www.ibm.com//developerworks/cn/aix/library/1212_lufang_c11new/ C++11 标准新特性:Defaulted 和 Deleted 函数 卢 昉 2012 年 12 月 24 日发布 WeiboGoogle+用电子邮件发送本页面   Defaulted 函数 背景问题 C++ 的类有四类特殊成员函数,它...

jfkidear的专栏 174

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++ 11 – Deleted & Defaulted Functions

• As we just with the “Rule of Three”, C++ defines default versions of the copy constructor, destructor and assignment = operator • Sometimes, we don’t want the default version of a function to be ava...

UniversityGrass的博客 347

【C++11】defaulted关键字

通过学习 defaulted 关键字,可以更好地管理类中的默认函数,提高代码的可读性和可维护性。

Hi, Boy 538

C++ delete用法简介之一Deleted functions

C++ delete用法简介之一Deleted functions

我的博客 557

Learning C++之 1.4c 关键字和命名标识符

关键字:C++保留了84个关键字作为自己使用,这些保留字在C++中往往有特殊的意义。以下就是C++的关键字:alignas **alignof **andand_eqasmautobitandbitorbool *breakcasecatchcharchar16_t **char32_t **classcomplconstconstexpr **const_cast *continuedeclty...

yingmuliuchuan的博客 322

C++11新标准

注:本文所有内容均来自侯捷老师的C++视频,非转载 一、模板 参数数量不定的模板参数 当使用typename…Types关键字时,表明参数个数随意,参数类型也随意。可以用于函数递归,每次减少一个参数。 示例代码 void print() { cout << "11111" << endl; } template<typename T,typename...Types> void print(const T& firstArg, const Types&

weixin_47730392的博客 352

C++11的default和delete的说明

在C++11标准中的描述是: =default: it means that you want to use the compiler-generated version of that function, so you don't need to specify a body. =delete: it means that you don't want the compiler to gen...

dong_beijing的博客 417

C++现代编程利器:=delete与=default在B+树项目中的实践

在C++编程中,特殊成员函数(如拷贝构造函数、移动构造函数、析构函数等)的管理是资源安全和性能优化的核心。理解编译器自动生成这些函数的规则(如Rule of Three/Five)是掌握C++对象模型的基础。通过显式控制这些函数的生成与删除,开发者可以精确表达类的设计意图,避免隐式转换错误和资源管理漏洞,从而提升代码的安全性和可维护性。这一技术在现代系统编程(如数据库索引实现)中尤为重要,它能确保像B+树节点这样的复杂数据结构拥有正确的拷贝与移动语义。本文以CMU 15445课程项目为背景,深入探讨如何运用

weixin_33739646的博客 399
上一篇: C++左值/右值/左值引用/右值引用
下一篇: c++重载(运算符)
EmLinuxDeveloper
博客等级 码龄2年 308粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值