摘要:     非const 引用形参只能与完全同类型的非const对象关联.      具体含义为:(1)不能用const类型的对象传递给非const引用形参:                  (2)实参类型必须与非const引用形参的类型完全一致,例如,不可以将一个float对象传给 double &类型的引用形参:                        (3)不能将一个右值类型的实参 传递给 非const引用形参.       建议:在不需要修改实参的值的前提下,尽量使用cons…
转自:http://blog.csdn.net/u011068702/article/details/64443949 1.看代码 2.编译结果 3.分析和解决 就拿f(a + b)来说,a+b的值会存在一个临时变量中,当把这个临时变量传给f时,由于f的声明中,参数是int&,不是常量引用,因为c++编译器的一个关于语义的限制.如果一个参数是以非const引用传入,c++编译器就有理由认为程序员会在函数中修改这个值,并且这个被修改的引用在函数返回后要发挥作用.但如果你把一个临时变量当作非cons…
int f (int & I) { cout<<I<<std::endl; } void main() { long L; f(L); // 编译不过 f((int)L); // 编译不过 f((int&)L);// 编译过 } 编译不会通过,这种情况下pL不会自动转换成int *,因为类型转换会生成临时变量,不能接收函数返回值 void func(int *& a){}; void * p; int * pint; func(pint); func((in…
在c++可以定义一个const变量,然后把变量的值赋给一个非const指针,可以通过指针来改变const变量的值吗?下面的截图给出了答案…
工作中遇到一个引用临时变量的问题,经过两天的学习,私以为:不仅弄明白了这个问题,还有些自己的独到见解. 这里使用一个简单的例子来把自己的学习过程和理解献给大家,如果有什么问题请不吝指正.   *************************Code*************************   class Dog { public:     Dog(){}     virtual ~Dog(){} };   void NonConstReference (Dog & dog ) {  …
const 表示常类型   作用: 1.具有不可变性.   2.可以很方便对参数进行调整和修改,和宏定义一样,不变则已,变都变.   3.保护被修饰的东西,防止被意外修改.(如:在修饰函数的形参时,加const可以保证参数的值不被改变)   4.为函数重载提供参考.   5.节省空间,避免不必要的内存分配.(如:宏定义是立即数,会分配多次内存,因此有多个复制:const在内存只有一份复制)   6.提高程序效率,编译器通常不为普通的const常量分配内存,而是存在符号表中,就没有存储和读内存的操…
C++ 中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量.主要的用途主要有两类: 1) 函数的返回值, 如: string proc() { return string("abc"); } int main() { proc(); ; } 其中第 8 行会产生一个临时变量.但并不是所有返回值都会创建临时变量,只有当没有将返回值赋值给其它变量时,临时变量才会创建.这种临时变量的生命周期很短,当表达式完成后,它就会被销毁了.例如上面的代码,第 8 行产生的临时变量,到第…
http://www.cnblogs.com/catch/p/3251937.html C++中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量. 主要的用途主要有两类: 1) 函数的返回值, 如: 1 string proc() 2 3 { 4 5 return string("abc"); 6 7 } 8 9 10 11 int main() 12 13 { 14 15 proc(); 16 return 0; 17 18 } 其中第15行会产生一个临时变量.但并不…
没找到具体原因,MSDN看到下面这句,VC是从2008才有这一限制的,感觉就是从语法上对临时变量增加了限定,因为一般说来修改一个临时变量是毫无意义的,通过增加限定,强调临时变量只读语义.虽然实际上修改临时变量并不会有问题. Visual Studio 2008 In previous releases of Visual C++, non-const references could be bound to temporary objects. Now, temporary objects ca…
Static_cast可以对对象也可以对指针也可以对引用,但是const_cast只可以对指针和引用使用,后者不可以对对象用,如果你要把一个const值转化为非const值只能用隐式执行或通过使用static_cast.C 样式转换或函数样式转换执行. 比如: const int aa = 10; //int bb = const_cast<int>(aa);错误 int bb = int(aa);//传统的c转化方式 int bb = static_cast<int>(aa);/…