随笔分类 - C++
摘要:我们都知道C++传递参数有三种形式,传值,传指针和传引用,而一般C#中只有传值和传引用,但无论是在C#中还是C++参数传递实际上只有两种:值传递和引用传递,值传递就是将对象拷贝一份到栈上,引用传递则传递的就是对象本身。在弄清楚值传递和引用传递之前一定要弄清楚引用和指针的区别,指针的概念我想很容易理解,因为在C++中它是实实在在占据内存的一个东东,但是“引用”一词通常容易让初学者混淆,个人认为引用更多是语义上的东西,在C++中把引用就看成是变量本身,调用方法的时候无论传递的是值还是指针,其实传递的都是拷贝,而传递引用的时候即所谓的引用传递传递的就是实参本身。#include "stda
阅读全文
摘要:摘要:1)“引用必须用左值来初始化”基本上着意味着引用的初始化物必须具有一个地址,也有一个值(→常见错误6)。不过谈及指向常量的引用时,事情就开始变得复杂了。指向常量的引用仍然必须用左值来初始化,不过编译器很乐意——在特定的情况下——为此从一个非左值出发来创建一个左值(临时对象):const int &r3=12;//没问题引用r3指向编译器隐式分配内存并创建的匿名int类型对象。一般情况下,这种编译器的生存期持续到权表达式结束处①。不过“在这种特例下,标准网开一面,保证临时对象会和以其为初始化物的引用共存亡”。“请注意该对象与以其为初始化物的引用之间并无联接纽带”。②2)“编译器还会
阅读全文
摘要:首先要理清几个术语:常量指针(const pointer)和指向产量的指针:常量指针(const pointer)是指一个拥有常量值得指针,其中并不包含“其指涉物是否为常量”的任何暗示。const char *pci;//指向常量的指针char *const cpi=0;//常量指针char const *pci2;//仍然是指向常量的指针const char * const cpci=0;//指向常量的常量指针。char *ip;//普通的指针“C++标准规定允许进行‘增加常量性’的(无条件)类型转换”。举例来说,我们可以把一个指向非常量的指针复制到一个指向常量的指针。这样我们就可以——当.
阅读全文
摘要:摘要:1)“字面常量没有地址,永远不能改变其值”③2)关于左值和右值得理解误区:左值并不是指能放在赋值号左边的值,右值自然也不是指能放到赋值号右边的。左值可以放在赋值号右边,但右值一定只能是在赋值号的右边。但左值也不一定能放在赋值号的左边:const int i;对于常量i是不能放在赋值号的左边的,但其的的确确是个左值,它是一个不能改变的左值。正确的理解是:左值是“能放置值得地方”,而右值就是没有与之相关的地址的值。3)关于常量性的理解:int i=10;const int *ip=&i;i=10;//没问题,约束的不是i的一般操作,而是通过ip对i的操作*ip=13;//错误“con
阅读全文