• 小知识点杂记


    1.QString与本地std::string之间的转换

    std::string s=qstr.toStdString();
    QString qstr=QString::fromStdString(s);
    

    2.Qt中遇到error:LNK2019:无法解析的外部符号

    有可能是因为之前编译出错了之后改正了代码没有覆盖生成.obj文件(猜测)。将debug/release文件夹删了,重新编译运行。

     3.头文件中一定不要有实现。

    写头文件的时候一定要把对应实现写在.cpp源文件里,不要写在头文件里,头文件里只有声明。那么这里有个问题,泛型的头文件为什么可以写实现?首先泛型函数的函数体不能写在另一个文件里,泛型编程是这么规定的,但是泛型函数的函数体应该并不算真的实现,因为只有调用的时候确定了类型才可能实现这个函数,泛型函数的函数体只是给编译器一个模板告诉它怎么生成定义;那么含有泛型的头文件可以有.cpp源文件吗?显然可以,比如含有泛型的头文件中还有一些其他的非泛型函数,这些函数的实现还是必须在.cpp文件里。

     4.在.cpp文件中定义类

    我们知道在.h对应的.cpp文件中定义的类不能在外部使用,因为其他文件只包含了.h文件,所以不能使用在相应的.cpp中定义的类(要么是出现未定义的标识符错误提示,要么是不允许使用不完整的类型错误——这是在.h文件中有前置声明的情形),这样有一个好处是如果想定义个类只是作为包含的.h文件中主要类的支持类,不想其为外部使用,可以将其定义在对应.cpp文件中。

    5.函数不改变的形参设为const参数,类成员函数不改变成员变量时设为const函数

    我觉得这是一个好习惯,既表明了函数不改变形参或成员变量的意图,又可以兼容使用const的实参。

    6.*&和&*是什么意思

    就是直观的意思,*&表示先取地址后解引用,&*表示先解引用后取地址。解引用后取地址,取地址后解引用,那不是还是自己,何必多次一举?其实不一定。比如函数的参数为double *&p表示这个参数是一个指向double型指针的引用;再比如std::vector<double>::iterator it=v.begin();//v为对应类型vector,而有另一个函数void fun(double *),则可使用fun(&*it),先是对迭代器解引用得到元素,后取地址成为指向元素类型的指针,这里&*并没有得到iterator本身是因为iterator重载了*。

    7.保存指针的vector可以压入NULL空指针吗?

    可以。只要记得使用前判定是否为NULL就好了。

  • 相关阅读:
    字符菱形
    字符三角形
    10:超级玛丽游戏
    09:字符菱形
    08:字符三角形
    07:输出浮点数
    06:空格分隔输出
    05:输出保留12位小数的浮点数
    04:输出保留3位小数的浮点数
    02:输出第二个整数
  • 原文地址:https://www.cnblogs.com/blog-vincent-0x1F7/p/9512767.html
Copyright © 2020-2023  润新知