小知识点杂记

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就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值