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,然后自己去思考怎么解决。

  • 相关阅读:
    Hard Rock
    Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
    codeforces 793B. Igor and his way to work
    codeforces 1B Spreadsheets
    HDU 1069 Monkey and Banana
    codeforces 2B The least round way
    【机器学习】 通俗说拟合
    python-八皇后问题
    python-核心知识思维导图
    python-@property 属性
  • 原文地址:https://www.cnblogs.com/aoru45/p/9748485.html
Copyright © 2011-2022 走看看