c++ const限定符的使用

思科9117AP从零配置EWC模式实战:Wi-Fi6网络搭建避坑指南 本文详细介绍了思科9117AP在Wi-Fi6网络环境下配置EWC模式的实战指南,涵盖镜像准备、网络环境配置、模式转换步骤及高级运维技巧。通过EWC模式,企业可实现控制器与AP的一体化部署,显著降低成本和简化运维,特别适合中小企业Wi-Fi6网络搭建。 阅读详情

const限定符的使用

     

刚写完关于volatile限定符,于是想将const的相关用法一并整理。

=================const 与volatile的关系:==============================

根据c/c++语法,const可以出现的地方,volatile几乎也都可以出现。但是,const修饰的对象其值不能改变,而volatile修饰的对象其值可以随意地改变,也就是说,volatile对象值可能会改变,即使没有任何代码去改变它。在这一点上,最典型的例子就是内存映射的设备寄存器和多线程中的共享对象。懂得使用volatile也是一门小小的艺术。使用volatile约束符可以阻止编译器对代码过分优化防止出现一些你意想不到的情况,达不到预期的结果;过频地使用volatile很可能会增加代码尺寸和降低性能。     

      Dan Saks在其文章中对const的应用做了详细的讲解。

    ===================const关键字的含义===============================

const是只读的。使用const在一定程度上可以提高程序的安全性和可靠性

   ===================const的应用实例=================================

下面的声明都是什么意思? 

const int a; 
int const a; 
const int *a; 
int * const a; 
int const * a const; 

/******/ 
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:

   在C中const限定一个变量不允许被改变,即它是只读的。

1.问题:const变量 & 常量(C)

  为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? 

  const int n = 5;

  int a[n];

  答案与分析:

  1)、这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, “abc”,等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。

  2)、注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。

  3)、那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
======================C++ const使用:=============================

  C++中const总结 
一:对于基本声明 
       1.const    int    r=100;    
       //标准const变量声明加初始化,因为默认内部连接所以必须被初始化,其作用域 
       为此文件,编译器经过类型检查后直接用100在编译时替换. 
       2.extend    const    int    r=100;    
       //将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行 
       初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义. 
       3.const    int    r[]={1,2,3,4}; 
       struct    S    {int    a,b;}; 
       const    S    s[]={(1,2),(3.4)}; 
       //以上两种都是常量集合,编译器会为其分配内存,所以不能在编译期间使用其中 
       的值,例如:int    temp[r[2]];这样的编译器会报告不能找到常量表达式 
二:对于指针 
       1.const    int    *r=&x;    
       //声明r为一个指向常量的x的指针,r指向的对象不能被修改,但他可以指向任何 
       地址的常量. 
       2.int    const    *r=&x;//与用法1完全等价,没有任何区别。 
       3.int    *    const    r=&x;    
       //声明r为一个常量指针,他指向x,r这个指针的指向不能被修改,但他指向的地址 
       的内容可以修改. 
       4.const    int    *    const    r=&x;    
       //综合1,3用法,r是一个指向常量的常量型指针. 
三:对于类型检查 
       可以把一个非const对象赋给一个指向const的指针,因为有时候我们不想从这个 
       指针来修改其对象的值,但是不可以把一个const对象赋值给一个非const指针, 
       因为这样可能会通过这个指针改变指向对象的值,但也存在使这种操作通过的合 
       法化写法,使用类型强制转换可以通过指针改变const对象: 
       const    int    r=100; 
       int    *ptr=const_cast <int*> (&r);//C++标准,C语言使用:int*    ptr    =(int*)&r;

四:对于字符数组 
       如char    *    name    =    "china ";    
       这样的语句,在编译时是能够通过的,但是 "china "是常量字符数组,任何想修改 
       他的操作也能通过编译但会引起运行时错误,如果我们想修改字符数组的话就要 
       使用char    name[]= "china ";这种形式. 
五:对于函数 
       1.void    Fuction1(const    int    r); 
       //此处为参数传递const值,意义是变量初值不能被函数改变 
       2.const    int    Fuction1(int);    
       //此处返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数 
       按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何 
       的const或非const类型变量,完全不需要加上这个const关键字.但这只对于内部 
       类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左 
       值使用),对于用户自定义类型,返回值是常量是非常重要的,见下面条款3 
       3.Class    CX;    //内部有构造函数,声明如CX(int    r    =0) 
       CX    Fuction1    ()    {    return    CX();    } 
       const    CX    Fuction2    ()    {    return    CX();    } 
       如有上面的自定义类CX,和函数Fuction1()和Fuction2(),我们进行如下操作时: 
       Fuction1()=CX(1);    //没有问题,可以作为左值调用 
       Fuction2()=CX(1);    //编译错误,const返回值禁止作为左值调用.因为左值 
                             把返回值作为变量会修改其返回值,const声明禁止这种修改. 
       4.函数中指针的const传递和返回 
       int    F1    (const    char    *    pstr);    
       //作为传递的时候使用const修饰可以保证不会通过这个指针来修改传递参数的 
       初值,这里在函数内部任何修改*pstr的企图都会引起编译错误. 
const    char*    F2();    
       //意义是函数返回的指针指向的对象是一个const对象,它必须赋给一个同样是指 
       向const对象的指针. 
       const    char*    const    F3();    
       //比上面多了一个const,这个const的意义只是在他被用作左值时有效,它表明这 
       个指针除了指向const对象外,它本身也不能被修改,所以就不能当作左值来处理. 
       5.函数中引用的const传递 
       void    F1    (const    X&    px);    
       //这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁 
       止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本, 
       然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效. 
       另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性, 
       且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const 
       传递能够捕捉到这个家伙. 
六:对于类 
       1.首先,对于const的成员变量,只能在构造函数里使用初始化成员列表来初始化, 
       试图在构造函数体内进行初始化const成员变量会引起编译错误.初始化成员列表 
       形如:X::X(int    ir):r(ir){}    //假设r是类X的const成员变量 
       2.const成员函数.提到这个概念首先要谈到const对象,正象内置类型能够定义 
       const对象一样(const    int    r=10;),用户自定义类型也可以定义const对象 
       (const    X    px(10);),编译器要保证这个对象在其生命周期内不能够被改变.如果 
       你定义了这样的一个const对象,那么对于这个对象的一切非const成员函数的调 
       用,编译器为了保证对象的const特性,都会禁止并在编译期间报错.所以如果你想 
       让你的成员函数能够在const对象上进行操作的话,就要把这个函数声明为const 
       成员函数. 
       假如f()是类中的成员函数的话,它的声明形如: 
       int    f()const;    
       //const放在函数的最后,编译器会对这个函数进行检查,在这个 
       函数中的任何试图改变成员变量和调用非const成员函数的操作都被视为非法 
       注意:类的构造和析构函数都不能是const函数. 
       3.建立了一个const成员函数,但仍然想用这个函数改变对象内部的数据.这样的 
       一个要求也会经常遇到,尤其是在一个苛刻的面试考官那里.首先我们要弄清楚考 
       官的要求,因为有两种方法可以实现,如果要求不改变原来类的任何东西,只让你从 
       当前这个const成员函数入手,那么你只有使用前面提到的类型强制转换方法.实例 
       如下: 
       //假如有一个叫做X的类,它有一个int成员变量r,我们需要通过一个const成员函 
       数f()来对这个r进行++r操作,代码如下: 
       void    X::f()const 
       {const_cast <X*> (this)-> ++r;    }    //通过this指针进行类型强制转换实现 
       另外一种方法就是使用关键字:mutable. 
       如果你的成员变量在定义时是这个样子的:mutable    int    r; 
       那么它就告诉编译器这个成员变量可以通过const成员函数改变.编译器就不会再 
       理会对他的检查了

通俗傻瓜式理清光栅化渲染和光线追踪渲染的原理 用通俗语言傻瓜式的讲清楚光栅渲染和光线追踪渲染的原理,方便没有相关理论基础的朋友理解入门。 阅读详情

相关推荐

gcc/g++ 链接库的编译与链接

gcc/g++ 链接库的编译与链接 surgewong@gmail.com http://blog.youkuaiyun.com/surgewong       程序编译一般需要经预处理、编译、汇编和链接几个步骤。在实际应用中,有些公共代码需要反复使用,就把这些代码编译成为“库”文件。在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态(链接)库,其特点是可

Surge 4万+

const的思考

1、什么是const?   常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)2、为什么引入const?  const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。3、cons有什么主要的作用?   (1)可以定义const常量,具有不可变性。        例如:             c

hustli的专栏 2872

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 403

C++中const限定符的使用

1. const 修饰普通变量 1.1应用场景 比如如下的代码: int bufSize=512; for(int index=0;index!=bufSize;++index){ //... } 定义一个变量代表某一个常数仍有问题:bufsize是可被(有意或无意)修改的。const限定符解决这个问题。它将一个对象转换成一个常量。 修改为:const int bufsize=512;//inp...

feng_xun123的博客 484

探测器反向偏压_光探测器PN结原理

1 光探测原理在光的作用下,当光敏物质中的电子直接吸收光子的能量足以客服原子核的束缚时,电子就会从基态被激发到高能态,脱离原子核的束缚,在外电场作用下参与导电,因而产生了光电效应。(这里需要说明的是,如果光子不是直接与电子起作用而是能量被固体晶格振动吸收,引起固体的温度升高,导致固体电学性质的改变,这种情况就不是光电效应而是热电效应)。根据所用结的种类的不同,可分为PN结,PIN 结型,...

weixin_42489104的博客 2549

UVM实战 卷I学习笔记1——简单的UVM验证平台:只有driver

目录验证平台的组成最简单的验证平台——只有driverUVM如何搭建driver:加入factory机制加入objection机制加入virtual interface 个人《UVM实战卷I》学习随手笔记,此书作者:张强 验证平台的组成 一个验证平台要实现的基本功能: 模拟DUT的各种真实使用情况——给DUT施加各种激励→driver实现激励功能; 根据DUT的输出判断DUT行为是否与预期符合→scoreboard(也称为checker)——需注意判断的东西和判断的标准是什么; 收集DUT的输出并传递

weixin_41979380的博客 3891

const限定符在C++的使用

1、const变量可以对变量的类型加以限定。 如:const int bufSize = 512;   表示把bufSize定义成了一个常量,任何试图为bufSize赋值的行为都将引发错误。   且const 修饰的对象必须要初始化。 2、默认状态下,const对象仅在文件内有效 如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字。 示例如下:   练习2.26:下面哪些句子是合法的?如果有不合法的句子,请说明为什么?   [外链图片转存失败,源站可能有防盗链机制,建议将图

weixin_38140795的博客 292

推荐一个直接用于项目开发的PID库!很好用,很稳定

关注、星标公众号,不错过精彩内容大家好,我是小麦。最近有朋友问到有没有现成的C语言PID库。当然有了!现在我就准备给大家安利一下了。一般同学会去某度上搜,看到各种各样版本的PID示例,或者...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 9029

C++对指针使用const 限定符

const 修饰 指针有三种形式 1. const int * p; int x = 32; const int * p = &x; 2. int * const p int x = 32; int * const p = &x;   3. const int * const p; int x = 32; const int * cons

longhua 771

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置

君逍遥o 1018

第38节:cesium 风场效果(含源码+视频)

cesium 风场效果

qq_29384639的博客 2332

【C++】【基础】const限定符的使用

在上一阶段,翻阅了《C++primer》中的前两章,在此处将const限定符的使用方法写在博客中,加深自己的理解,也方便遗忘时的查阅。 1.使用const修饰可以将一个变量定义为一个常量,必须初始化,不能更改。想要为常量定义会引发错误。 2.const对象被设定为仅在文件内有效,想在多个文件内共享,必须在定义之前添加extern,声明时也必须添加extern。

步晓德德德 早早早啊~! 469

ESP32学习笔记03-日志打印

日志分为5个等级。

Car12 1416

c++基础知识总结——const限定符的使用

使用目的及优点: (1)如果在程序中多个地方使用同一个常量,则需要修改这个常量时,不用每一个使用的地方都修改,只需在定义的地方修改即可。 比如:在头文件中声明一个表明一年中月份数的符号常量: const int Month = 12; 这样,在以后程序中用到12这个月份数的时候都可以用Month来代替,假如项目需要月份数变为13了,那么不需要一个地方一个地方的去将12改为13,只需要修...

walkman_lfq的博客 462

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c++中const限定符的使用

1. const T* v,此时2. T* const v, 此时3. const T* const c, 此时。

qq_35644837的博客 462

深度学习工具包 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++ 指针使用const限定符以及指针读法

在C++中为什么要用const对象的指针 其实在教材中也说了,使用const限定符可以强制改变访问的权限。 const指针表示指针本身是一个常量。由于指针是对象,因此就像其他对象一样,允许把指针本身定为常量。cosnt指针必须初始化,并且一旦初始化,const指针的值就不能改变了。const指针的值到底是什么?其实就是存放在指针中的地址,这个地址是一个对象的地址。 如果指针指向const对象...

似水流年,是谁苍白了等待 502

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C++ const 限定符 指针的使用方法

 C++中的常量符号const限定符相信大家都比较熟悉它对于基本类型变量的使用方法了无非有最常用的那种:const type name = value;在声明的时候进行初始化。 这个放下不表,看下面:const * int a = ...;int * const a = ...;int const * a = ...; 这三种const限定符

tiaotiao168的专栏 592

c++的const限定符的使用实现全解

#include using namespace std;int main(){ int i = 2; const int &r1 =i; r1 =42; cout<< r1; return 0;}

Accept 553

C/C++ const限定符的使用

C/C++ const限定符的使用

wendyWJGU的博客 387

c/c++语言中const限定符使用

const是干什么的 定义 When modifying a data declaration, the const keyword specifies that the object or variable is not modifiable. When following a member function’s parameter list, the const keyword ...

guotianqing的博客 799

【C++】const 限定符

const 限定符

qq_46403377的博客 442

C++ Primer阅读笔记--const限定符的使用

指向常量的指针:指针指向的值不可修改,即*cptr不能修改;而指针的值可以修改,即cptr可以修改,从而指向不同的对象;常量指针:指针指向的值可以修改,即*curErr可以修改;而指针的值不能修改,即curErr不能修改;将引用绑定到 const 对象中,称为对常量的引用,即对 const 的引用称为对常量的引用;指向常量的常量指针:指针指向的值和指针的值均不能修改!底层 const:表示指针指向的对象是一个常量;对常量的引用不能被用作修改它所绑定的对象;顶层 const:表示指针的值是一个常量;

牵一只蜗牛去散步 282

const限定符

c++ const介绍和使用

qq_57041630的博客 1053

C++ const 限定符

在修饰普通变量时,在变量定义前面加上const即可。const变量在定义的时候要进行初始化,并且之后不能再给它赋值,否则会报错。

qq_52536196的博客 409

const 限定符部分使用

const限定符在不同位置修饰的量是不同的。在C++中: 1.vector中iterator(就远原则) 1)vector::const_iterator 表示vector中量均为const,不能被修改,但iterator可以被修改; 2)const vector::iterator  表示iterator为const,iterator本身不能被修改,但可以通过其修改vector中的值。

VV 544

const 限定符

const限定符可以使用最简单的来说它就是一个只读,不可写的限定。1.如果定义变量为常量时与其匹配的指针必须也是 const。  eg:         const double pi = 3.14;         double *cptr = π        //error         const double * cptr = π         //ok         此时的cptr 所指向的类型是不可写的,即cptr 所指向的内存块只读。         double pi = 3.14;

lixiwen0804的专栏 364
下一篇: 关于运算符重载(总结)
programerchen
博客等级 码龄15年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值