zoukankan      html  css  js  c++  java
  • [C++讨论课] 课堂记录(一)

    今天第一次参加c++讨论课,记录下了各组同学的展示的问题或者解决方法,也有一些知识点上的内容,供以后复习参考。

    1.常量指针和指针常量问题

    常量指针:指向常量的指针,例如const int *p = &a,可以改变p的指向,但是指向的必须是常量。

    指针常量:就是常指针,例如int * const p = & a ,可以修改p指向的变量的值,但是p的指向改不了。

    2.函数传参问题

    void f(const int &a)  可以传入表达式参数

    void f(int &a) 不能传入表达式参数

    原因:表达式其实是一个函数,例如a+b返回的其实是个临时变量的值,传值过来就被视为常量,而c++规定引用传参不允许绑定常量,也就是说,引用必须引用的是一个变量,由于传来的是常量,所以不能引用。而前者是常引用,也就意味着可以引用常量,从而解决了表达式传参的问题。

    3.只传部分参数返回结构体引发的生命周期问题

    struct AA{

        int x;

    }

    AA *f(int a,int b,int c){

        AA aa;

        AA * p = &aa;

        aa.x = a + b +c;

        return p

    }

    这个函数显然写的有问题,因为aa的生命周期在函数内,在函数外就没用了,因为返回指向aa的指针是没有意义的。

    解决方法:

    ①动态生成结构体

    A *p = new A();

    这种new出来的结构体生命周期是在你delete之前一直存在的,所以符合要求,不过要记得在main函数执行完了或者在其他地方释放掉内存。

    ②局部静态结构体

    static AA aa;

    在AA aa 前加上static让他成为静态变量,这样生命周期就长于这个函数了,不过这样破坏了C++的局部可见性,不是很推荐。

    然后其他的引用等方法没必要写了,太常规。

    4.cin出错引发的问题

    int a;

    cin<<a;

    我们输入一个字符*  然后程序后面再写个cin,发现读取不了数据了,说明cin出错了,我们打印cin.fail()发现标志位为1,表示有错误,那么很简单,我们要想再读取输入,就必须清楚标志位,cin.clear()即可。

    5.string传参问题

    有同学讲到string作为参数给函数,然后函数内部想用c的char * 的数据类型函数操作的时候,发现操作不了。于是找到了c_str()方法,将string类型转换为char * 类型。

    eg:

    String a = "hello";

    char * b = a.c_str();

    6.Template知识点

    template想要处理多个数据类型不同的变量的时候,可以这么定义:

    Template <typename T,typename,P>

    课堂总结:

    有一个小组展示的时候展示形式是“提出问题-debug问题-解决问题”的形式,我印象非常深刻,形式上有可借鉴之处,他的思考也很有深度,不过他的问题我没怎么搞懂,私底下试了试好像也没出现他在课堂上演示的时候提出的问题,因此,我下次在看别人问题的时候应该拍下来,回去之后反复试试是不是真的有这么个Bug,然后自己去思考怎么解决。

  • 相关阅读:
    使用docker部署zabbix
    如何用好 IDEA ,Java 撸码效率至少提升 5 倍?
    getpass模块
    linux下利用nohup后台运行jar文件包程序
    Spring Cloud 与 Dubbo 区别
    git 打标签并推送tag到托管服务器
    git-stash用法小结
    git推送本地分支到远程分支
    Git dev分支合并到master分支完美实战
    IntelliJ远程调试教程
  • 原文地址:https://www.cnblogs.com/aoru45/p/9748485.html
Copyright © 2011-2022 走看看