修改const变量】的更多相关文章

  一.结论 声明:不同于C语言的const变量修改问题(可以通过指针间接修改const变量的值),这里只讨论C++ 里的const. C++ const 修饰符,表示常量,即如果以后保证不会修改则声明为const,否则若要修改,那一开始为什么还要声明为const呢? 根据C++标准,对于修改const变量,属于:未定义行为(指行为不可预测的计算机代码),这样一来此行为取决于各种编译器的具体实现(即不同编译器可能表现不同). 故结论就是:不建议这么做! 但是,是的,但是,网上论坛.博客里均有有关…
看下面的一段代码 ; int * j=(int*)(&i); // 运行正确,j确为i的地址,但 int *j=&i; 编译错误 *j=; //确实改变了i的值 printf("%d %d\n",i,*j); //输出0 1 第三行代码执行后,i的值确实已经改变 然而printf的结果确实0 1,这是因为,在C++中对于const变量,在编译期就进行了替换,运行的时候printf中i已经被替换为0了,而*j是从内存中从新取值.…
总结:这个跟计算机语言类别和编译器有关,本文是在linux环境下说明的. 分两种情况: 1. C语言: 2. C++语言: /*! * \Description: * \author scictor <scictor@gmail.com> * \date 3 */ #include <stdio.h> ;// 常量数据区,只读,指针修改导致程序Segmentation fault.const string myglobal("global"); //const_…
转自const变量的存储区及修改权限 [cpp] view plaincopy const int a = 1; int *p = const_cast<int*>(&a); *p = 2; cout << "value a="<< a << endl; cout << "value *p=" <<*p << endl; cout << "address…
http://no001.blog.51cto.com/1142339/389840/ mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的.但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,…
遇到了一个关于const修饰的变量值是否能修改问题,虽然我知道const变量在某些情况下可以通过指向它的指针来间接修改,但是对原理还是很模糊,今天就整理了一下. 一.三个试验压压惊 1.直接对const变量修改 #include <stdio.h> int main(void) { ; a = ; printf("a=%d",a); } 编译一下,看看出现什么情况: 很遗憾,编译出错了. 2.const变量通过指针修改试验 #include <stdio.h>…
const的变量在特定情况下可以通过指针修改,但是在另一些情况下是不能通过指针修改. 以下是VC6下才测试. 1. 不能修改的情况 #include int const a = 10; void main(void) { int *p = (int*)&a; *p = 20; printf("%d\n", *p); } 程序编译通过,但运行时错误: 指示a存储的空间不可以写,也就是没有写权限,不能修改其值.估计是存储在全局空间,且只有可读属性.   2. 能修改的情况 #inc…
https://bbs.csdn.net/topics/110049293 #include <iostream> using namespace std; int main(){ cout << "const变量实践:" << endl; // 必须加 volatile才会改变 ; *((; cout<<a111<< endl;; cout << "a111:" << a111 &…
解<C++ Primer 5th>的 9-50 练习题时,遇到了 lambda表达式值捕获和引用捕获之区别问题. 欲修改捕获的变量 sum,累加之.但当时忘记值捕获和引用捕获是有区别的.下面的代码使用值捕获,未能修改 sum变量的值: int main(){ vector<string> v; string s; ; while (cin >> s) v.push_back(s); for_each(v.cbegin(), v.cend(), [sum](const s…
const 和 let 的唯一区别就是用 const 声明的变量不能被重新赋值(只读变量),比如像下面这样就会报错: const foo = 1 foo = 2 // TypeError: Assignment to constant variable. 注:本文不会使用“常量”这个术语,因为我觉的这个术语容易有歧义:有些人把数字.字符串等这些不可改变的字面量称为常量,也有人把一些只读属性称为常量,比如 Math.PI,还有人把 ES6 里用 const 声明的变量称为常量.不过一般来说,这点歧…
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装jdk1.6前,执行java -version得到 C:\Users\liuxiang2>java -version java version "1.7.0_21" Java(TM) SE Runtime Environment (build 1.7.0_21-b11) Java H…
在C++中const变量定义时必须进行初始化,否则无法通过编译. 初始化的方式有多种,可以通过字面值对其进行初始化,也可以通过变量对其初始化,或其他方式,只要能给const变量赋初值即可(当然初值应该有其意义). 例: int i = -1; const int ic1 = -1; const int ic2 = i; 不合法情况: const int ic = i; int *const cpi = &ic; 因为const指针cpi指向的不是一个const对象.…
在Linux操作系统中,有时候跟着教程安装了一些软件,安装成功后,很高兴的准备运行该软件相应命令,但是偶尔会遇到”Command not found…“的提示.原因是因为你安装的软件需要设置环境变量才能运行. 在Linux操作系统下修改环境变量有以下三种方法(以设置jekyll的环境变量为例) 1.直接赋值 在命令行中输入 PATH=$PATH:/usr/lib64/ruby/gems/2.1.0/gems/jekyll-2.5.3/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销…
参考:Ubuntu 12 修改环境变量 [实战] 把 php.php-fpm.nginx.mysql 的相关命令路径添加到 用户环境变量 $ vim ~/.bash_profile alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' export GOROOT=/usr/local/go export GOPATH=/Users/jianbao/GoProjects/go-study export PHP=/usr/local/php/php…
Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量.系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效. 修改用户环境变量 用户环境变量通常被存储在下面的文件中: ~/.profile ~/.bash_profile 或者 ~./bash_login ~/.bashrc 系统环境变量 系统环境变量一般保存在下面的文件中: /etc/environment /etc/profile /etc/bash.bashrc 添加环境变量 方法一:修改当前用户环境变量…
本机已经安装了jdk1.6,而比较早期的项目需要依赖jdk1.5,于是同时在本机安装了jdk1.5和jdk1.6. 安装jdk1.5前,执行 java -version 得到java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode) 安装完jdk1.5,并修改环境变量…
  原文:http://www.cnblogs.com/zhenmingliu/archive/2013/02/21/2921396.html   先到我的电脑>属性>高级>环境变量,添加新环境变量或修改已有的环境变量,然后运行"DOS命令提示符"或run cmd,假设要修改PATH变量,不管PATH的原值是什么,在DOS窗口直接把PATH修改为任意值,关闭DOS窗口,这时,我的电脑>属性>高级>环境变量里PATH已经在Windows全局生效了. 不…
Mac下修改环境变量 如果使用默认Bash, 首先修改 ~/.bash_profile 文件,添加文件路径,比如: export PATH=~/bin:/usr/local/bin/node:~/Downloads/software/gradle-1.0/bin/:$PATH 然后输入 source ~/.bash_profile 使之生效. 如果使用的是 zshell , 编辑 ~/.zshrc 文件, 然后再 source ~/.zshrc .…
这里介绍Linux的知识,比如把/etc/apache/bin目录添加到PATH中有三种方法,看完之后你将学会Linux系统下如何修改环境变量PATH路径,需要的朋友可以参考下 电脑中必不可少的就是操作系统.而Linux的发展非常迅速,有赶超微软的趋势.这里介绍Linux的知识,让你学好应用Linux系统.比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.#PATH=$PATH:/etc/apache/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以…
const变量赋值报错分析 const变量赋值报错 从变量到常量的赋值是合法C++的语法约定的, 如从char 到const char顺畅: 但从char **到 const char **编译器就会报错: error: invalid conversion from `char**' to `const char**' 示例: int main(int argc, char *argv[]) { char a = '1'; const char b = a; char * a2 = "1234…
首先讲C编译器的内存分配: 代码区 数据区 用户区=线程栈+堆 其中的数据区存储:常量(define)+静态变量(static)+符号集(const)+全局变量   然后讲一下编译的大致顺序: 注释--> 预处理--> 编译--> 连接.   它们的保存: const修饰的是变量,会被编译到符号集中去,它本身是变量这是个大前提,如果把这个概念弄错了,你就会很可能会用这个变量来做数组的维数,而数组的维数只能是常量,这点要明白. define定义的常量就可以作为数组的维数,它当然是保存在数据…
方法一:批处理中,修改环境变量,一次性有效(也就是在当前的脚本中有效) CMD中运行 set path==%path%;d:/mypath 用 set path可以查看,当前的环境变量 方法二 :批处理中,修改环境变量,永久有效 ::更改path环境变量值,新增e:\toolswmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%;e:\tools…
一.概念性区别 const 变量就是在普通变量前边加上一个关键字const,它赋值的唯一机会就是“定义时”,此变量不能被程序修改,存储在rodata区. define定义的是常量,不是变量,所以编译器就不会给define定义的宏名字分配存储单元.通常来说,编译器对常量的处理方式是嵌入到代码中,以立即数的方式出现. 二.测试 1.const测试  const测试程序 #include <stdio.h> #include <stdlib.h> ;     printf("h…
/etc/profile 系统全局环境变量设定,所有用户共享,修改后,需要重启系统才能生效 ~/.bash_profile,~/.bashrc 用户目录下的私有环境变量设定,常用来个性化定制功能,修改后,退出再登录生效 1. 临时修改环境变量 export PATH=$PATH:/opt/project/nodejs/bin 只在本次登录有效 2. 永久修改环境变量 修改/etc/profile(不建议) export PATH="$PATH:/opt/project/nodejs/bin&qu…
比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.In shell: setenv <path_to_append>: $ENVNAME setenv PATH /etc/apache/bin:$PATH 为了优先使用新加的路径,把新加路径放在原$PATH前面. 单独查看PATH环境变量,可用: [root@localhost u-boot-sh4]#echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/…
详细大家对cmd的使用都有了一些简单的了解,但是困扰大家的主要的问题就是: cmd命令修改环境变量有两种方式:1. 短期内有效,在关闭dos窗口后就自动失效 2.长期有效,关闭dos窗口后还有效 下面详细介绍: 第一种(短期有效) set 环境变量名=环境变量值 下图是使用set命令设置java_home的环境变量(分为直接赋值和追加赋值) 第二种:长期有效 找到cmd.exe的文件(一般在C:\Windows\system32\下),以管理员的身份打开cmd文件 setx /m 环境变量名 "…
(一)执行sql遇到的错误如下: ### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (38708097 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable. ; SQL []; Packet for query is too large (387080…
提到修改环境变量,我们可能自然而然想到:右键This PC->Properties->Advanced System Settings->Environment Variables 当然,这种方式一般来说没啥问题. 不过,如果我们当前的用户不是管理员,然后我们还想修改我们当前用户的环境变量. 按照以上的步骤,会发现中间经过了一次切换成管理员帐号的过程,这样我们修改的环境变量发现只有管理员帐号的和系统的环境变量,找不到地方修改我们这个非管理员帐号的环境变量. 正确的姿势是:Control…
__block int a = 0; void (^foo)(void) = ^{ a = 1; }; Block不允许修改外部变量的值.Apple这样设计,应该是考虑到了block的特殊性,block也属于“函数”的范畴,变量进入block,实际就是已经改变了作用域.在几个作用域之间进行切换时,如果不加上这样的限制,变量的可维护性将大大降低.又比如我想在block内声明了一个与外部同名的变量,此时是允许呢还是不允许呢?只有加上了这样的限制,这样的情景才能实现.于是栈区变成了红灯区,堆区变成了绿…
在匿名内部类或某某情况下中引入的变量必须是Final最终型的:这时还想要去修改这个变量就需要使用到AtomicInteger这个类了: AtomicInteger CarSize = new AtomicInteger(); CarSize.getAndIncrement(); //获取当前的值,并自增; CarSize.get(); //获取当前的值 CarSize.getAndDecrement(); //获取当前的值,并自减 CarSize.getAndAdd(); //获取当前的值,并加…