当形参是 const 变量时,实参是 const 或者不是 const 变量都可以。 实参初始化形参时会忽略掉顶层 const: 1voidgel(constinta){2;3}45voidgel(inta){6;7}8//这两个gel函数的形参列表是等价的,因此会出现编译错误。 指针或引用形参与 const 1#include <iostream>2usingnamespacestd;34voidgel(int*a){5;...
例如:实参是const,那么形参如果是非const意味着可以在函数体中改变形参的值,使约束削弱了所以不行。对于使用&,自然也是这个道理。同样的,指针里面的const也是这个样子的,如果让非const指针指向了const对象的地址,那么必然是无法通过编译的,因为如果这样做了,意味着可以通过这个指针改变本该是const的值了,显然是使约束...
出现在函数参数中的const 表示在函数体中不能对这个参数做修改。比如上面的例子中strcmp() 函数用来比较两个字符串的大小,在函数体中不应该改变两个参数的值,所以将它定义为是const 的。const 通常用来限制函数的指针参数,引用和数组参数,而一般形式的参数因为形参和实参本来就不在同一内存空间,所以对形参的修改不会...
尤其在传递函数参数时,使用const引用(const <typename> & p) 2.如果用非const引用作为函数的形参,只能接受非const实参。而使用cons引用作为形参能够接受const实参和非const实参。 3.如果使用非const引用作为参数,调用函数时无法使用类型不匹配的参数(例如参数为long long&,我在调用函数时,可以用long long(非引用)作为...
如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能。const 只能修饰输入参数:如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针,起到保护作用。例如StringCopy 函数:void StringCopy(char *strDestination, ...
note:如果函数调用的参数不是左值或与相对应的const引用参数的类型不匹配,则C++将创建正确的匿名变量,将函数调用的参数的值传递给匿名变量,并让参数来引用该变量。 应该尽量的使用const 引用 使用const可以避免无意中修改数据的编程错误 使用const使函数能够处理const和非const实参,否者只能接受非const数据 ...
可基于函数的引用形参是指向 const 对象还是指向非 const 对象,实现函数重载。将引用形参定义为 const 来重载函数是合法的,因为编译器可以根据实参是否为 const 确定调用哪一个函数。 const到底是不是一个重载的参考对象,请看下面的例子 classA{public:voidf(inti){std::cout<<"1";};//函数1voidf(inti)const...
当形参是指针或者引用时,这时的const是底层const,这时const不能被忽略。可以使用常量实参或者非常量实参来初始化它都可以。可以根据形参中有没有const来区分函数是否重载: classObject{// ...};voidfun(Object &obj);voidfun(constObject &obj);// 第二个函数是第一个的重载Object obj1;constObject obj2;fun(...
Const对象可以用非const对象初始化,也可以付给非const对象,同时也能参与运算,只要初始化后不改变它的值就没问题。 Int i; Constint j=i;//正确 Intm=j;//正确 1. 2. 3. 4. 5. 6. 7. 第二部分:const的作用域 默认状态下,Const对象仅在文件内有效。所以不同文件的const对象不是同一个对象,即使名字...