精华内容
下载资源
问答
  • 形参有顶层const或者底层const的时候,传给它常量对象或者非常量对象都是可以的,在这里我们主要考虑形参无const, 而实参有const的情况,其实这里也十分简单,只需要记住一点:底层const的限制,就可以了。...
  • 不可以,因为在调用函数时需要对形参分配内存空间以用于接收实参传递的值,所以形参不可以是表达式,也不能在形参处其赋值,比如 int result(int a=3)是不可以的。 但是实参可以是表达式。 (摘自百度知道) ...

    不可以,因为在调用函数时需要对形参分配内存空间以用于接收实参传递的值,所以形参不可以是表达式,也不能在形参处对其赋值,比如 int result(int a=3)是不可以的。
    但是实参可以是表达式。
    (摘自百度知道)

    展开全文
  • 一,如果需要修改参数内容,则设置为普通引用类型 二. 如果需要修改参数内容则最好设置为常量引用... 2)显示了该函数所能接受的实参类型无法把const对象,字面常量或者需要类型转换的对象传递给普通的引用形参 ...

    一,如果需要修改参数内容,则设置为普通引用类型

    二.  如果不需要修改参数内容则最好设置为常量引用类型

    三本应设置为常量引用的设置为普通引用则会出现如下几个问题

            1)容易给使用者一种误导,即允许修改实参内容

            2)显示了该函数所能接受的实参类型无法把const对象,字面常量或者需要类型转换的对象传递给普通的引用形参

    展开全文
  • C++中的引用,给我们提供了一种区别于C指针的形参定义方式。一般我们可以将其定义为 ...三种方法用途一样,都可以通过编译。 以普通引用为形参的函数,一般会更改实参的值,比如increment(int &...

    C++中的引用,给我们提供了一种区别于C指针的形参定义方式。一般我们可以将其定义为

    1)普通引用

    void foo(int &n);

    2)常量

    void foo(const int n);

    3)常量引用

    void foo(const int& n);

    三种方法用途不一样,都可以通过编译。

    以普通引用为形参的函数,一般会更改实参的值,比如increment(int &n)等;以常量以及常量引用为形参的函数,一般不对实参进行修改。需要注意的是,当函数的功能确定后,不能把常量引用和普通引用混淆,虽然编译可以通过,运行也没有错误,但是会对函数的安全性以及功能造成影响:

    1)如果一个本该是常量引用的形参定义成了普通引用,那么程序员会误认为这个形参可以修改。而且,在调用该函数的时候,会产生意想不到的错误。比如:

    int getSize1(string &str){
        return str.size();
    }
    int getSize2(const string &str){
        return str.size();
    }
    void main(){
        getSize1("helloworld");//报错
        getSize2("helloworld");//正确
    }

    显然,getSize2才是符合正常函数思维的实现。

    2)常量引用为形参时,形参指向实参的空间,而常量为形参时,编译器会给形参重新分配空间。

    void foo1(const int n){
        printf("%x\n", &n);
    }
    
    void foo2(const int &n){
        printf("%x\n", &n);
    }
    int main(int argc, char *argv[]){
        int n = 1;
        printf("%x\n", &n);
        foo1(n);
        foo2(n);
        return 0;
    }
    
    //输出:
    //e25f58cc
    //e25f58ac
    //e25f58cc

     

    展开全文
  • 形参有顶层const或者底层const的时候,传给它常量对象或者非常量对象都是可以的,在这里我们主要考虑形参无const, 而实参有const的情况,其实这里也十分简单,只需要记住一点:底层const的限制,就可以了。2.常量...

    1.常量形参
    当形参有顶层const或者底层const的时候,传给它常量对象或者非常量对象都是可以的,在这里我们主要考虑形参无const, 而实参有const的情况,其实这里也十分简单,只需要记住一点:底层const的限制,就可以了。

    2.常量返回值
    这里也很简单,略过不提。

    3.常量成员函数
    常量函数里的const是用来修饰*this的,其形式如下:

    int f() const{```}

    然后这里就有意思了
    *this的默认类型是type *const this,this指针有一个顶层const,但并没有底层const,由于低层const的限制,有底层const的实参不能拷贝给默认版的*this,也就是说常量对象的引用或指针都不能调用默认版的*this成员函数。
    还没完。。。
    刚刚我们已经明确了有底层const的实参是无法初始化默认版*this,但是拥有顶层const的对象是不是就能初始化默认版的*this, 然后调用函数呢?
    不是。。

    //定义一个简单类student
    class student{
    public:
        string name;
        int number;
    public :
        student() :name("lili"), number(0){  }//构造函数
        string Name(){return name;}//非常量成员函数
        int Number() const{return number;}//常量成员函数
    
    };
    //现在定义一个常量student对象
    const student s1;
    s1.Name();//报错
    s1.Number();//正确

    事实上,当我们调用s1.Name()的时候发生了以下初始化过程:

    student *const this=&s1;

    此时相当于如下过程:

    const student *s1;
    student *const this=s1;

    很显然s1有一个底层const, 而this没有,初始化失败。
    同理,如果一个实参是 int *const p,那么在初始化this的时候,会转化成const int *const p, 有一个底层const, 初始化失败。
    综述:常量对象,常量对象的指针或者引用都只能调用常量成员函数。

    展开全文
  • 常量形参:值被改变了,禁止改变指向 常引用:值被改变了,禁止改变指向 分析过程代码: #include<iostream> #include<opencv2/opencv.hpp> using namespace cv; using namespace std; void ...
  • 例如我在使用Unity的MenuItem特性时,报了错"特性实参必须是特性形参类型的常量表达式、typeof 表达式或数组创建表达式" ​​​​​​​ ​​​​​​​ 经过几次定位,原因是因为我的字符串不是用const定义...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    虽然Java的类不可以多继承,但是接口可以多继承。 Java有自动内存管理机制,不需要程序员手动释放无用内存 Oracle JDK 和 OpenJDK 的对比 Oracle JDK版本将每三年发布一次,而OpenJDK版本每三个月发布一次; OpenJDK...
  • final修饰方法的形参是存在常量池么?在内存中的生命周期是怎么样的呢? ``` interface InnerClass { int getNum(); } public class OuterClass { public InnerClass getInnerClass(final int x)...
  • 在函数形参列表中,可以通过加 const 修饰形参引用,来防止形参改变实参。 void showValue(const int& v) { // 加了 const 修饰形参,则该形参不能被修改值 //v += 10; // 由于上面加了 const ,因此这行会报错; ...
  • double cube(double x) { return x*x*x; } void main() { double m;...1.实参可以常量,变量,表达式,函数等,但都必须是确定的值。 2.形参用于接收实参值的变量。 3.参数传递的过程:将实参的e值赋
  • } 这里同样,b进行操作改变a,但是a可以由其他途径正常修改 引用做函数形参 #include #include using namespace std; void myswap(int &a, int &b) { int tmp; tmp=a; a=b; b=tmp; } int main() { int a = 20...
  • void test(const unordered_map&...原因:map的[]运算符会在索引项不存在的时候自动创建一个对象,而常量不能改变。 解决办法:使用迭代器替换即可,如下例所示。 void test(const unordered_map&l...
  • 常量引用:原变量能通过此引用(别名)修改。 形式: char ch = 'a';...增加输入参数的灵活性:普通引用形参(没用const修饰)允许输入参数为const修饰的值(常量引用或常量)或右值,用const修饰后则...
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    46.用c语言编写程序,可以编写出任何类型的程序 47.C语言允许有空函数 48.C程序书写格式,允许一行内可以写几个语句 49.C程序的语句无行号 50.C语言的每个语句的最后必须有一个分号 51.C语言本身没有输入...
  • 2:实参可以常量、变量、表达式、方法。 3:形参是一个局部变量,其初始值为相应实参的值。 命令行参数 命令行参数指命令行中给定的参数。 可变参数 Java可变参数是1.5版本的新特性,当定义的方法
  • 默认形参

    2019-08-21 19:45:04
    函数的默认形参是在编译阶段确定的,因此只能使用常量常量表达式、全局变量数据作为默认值,如果函数的声明和定义需要分开,只需要在函数声明时设置默认形参即可,默认形参函数重载造成影响 ...
  • 我们经常会将常量直接传入函数,(当函数形参常量引用时候);如下面第二次的func调用 我本来以为直接传入常量,引用指向的空间是常量存在的静态区; 后来好奇看了一下发现不是;书上也明确有讲出会构造临时变量;...
  • 例如:fun(x=0,y=1),fun(x,y=1),但不可以是fun(x=1,y) 形参设置可以为数字字符串变量、元组和字典等任意类型数据,元组形参是在变量名前加*,字典形参是在变量名前加** 例如:fun(var),fun(*tuple),fun(*list),fun...
  • const总结二 之 常量函数形参

    千次阅读 2013-10-04 16:42:19
    有时候,如果形参是指针形参或者引用形参,或者是字符数组,想函数体其进行修改,那么可以采用常量函数形参。 实例: 定义EObject类,该类有width和height两个属性,有4个函数其进行读取和修改。 class ...
  • #include #include void abc(int *p) { std::cout*p; delete p; } int main() { abc(new int(5));...C++中特意char这个重载了一下,传入地址和传入变量,都输出对应的数据,而不是地址。
  • C++ 运算符重载

    万次阅读 多人点赞 2018-12-26 21:39:21
     的 +、-、*、/ 等运算符只能用于基本类型的常量或变量进行运算,能用于对象之间的运算。 有时希望对象之间也能用这些运算符进行运算,以达到使程序更简洁、易懂的目的。例如,复数是可以进行四则运算的,两个...
  • C++野指针及c++指针使用注意点

    千次阅读 多人点赞 2019-08-29 16:11:33
    此时p指向的是一个字符串常量*p的内容进行写操作,如srtcpy(p,s)是错误的,因为p的内容为“abc”字符串常量,该数据存储在常量存储区,但可以对指针p进行操作,让其指向其他的内存空间。 b.资源泄漏 ...
  • 所以指针本身也可以常量,指针也可以指向常量,下面区分一下。 1. 指向常量的指针(pointer to const) 指向常量的指针能用于改变所指对象的值。 const double pi = 3.14; const double *cptr = &amp;pi...
  • C#语言

    千次阅读 2019-11-08 10:54:13
    ​ C#的变量命名规则与Java也基本相同,只是"$"符号在C#中是能使用的,因此变量的命名规则可以简单总结为以下三条: ​ 组成:52个英文字母(AZ,az)、10个数字(0~9)、下划线(_),除此之外能含有其他...
  • C++三种函数形参形式

    2020-08-04 19:16:38
    C++三种函数形参简介为什么使用指针或引用作为形参使用引用和指针有什么区别使用常量引用 简介 普通形参 :普通形参只是把实参的值拷贝给形参对形参的改变不会影响到实参。 指针形参 :指针形参传入一个...
  • C++面试题汇总 (一)

    万次阅读 多人点赞 2019-06-27 08:54:39
    这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是其相应的目标对象(在主调函数中)的操作。 (2)使用引用传递函数的参数,在内存中并...
  • 1.题目 用Java编写一个小程序:要求从键盘输入圆的半径,求出圆的周长、面积。 2.源代码 import java.util.Scanner; public class Circle { ...//定義常量PI,注意3.14后的f System.out.prin...
  • 所以你会发现ArrayList 中的T和List中的T实际上有所一样的,就是类型形参和类型实参的区别。 第二、初学者很容易走进一个误区,认为类似T,K,V这种没有具体意义的类型就是类型形参,而像String,Int这种具体有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,064
精华内容 30,825
关键字:

形参不可以是常量对吗