--------------------------------------------------------------------------------
1. 如何使类的成员函数作为回调函数
--------------------------------------------------------------------------------
c++成员函数需要传递this 指针,从而实现一个成员函数为所有不同对象服务
要使成员函数成为回调函数,必须解决this 指针问题。
声明一个非成员函数为回调函数, 让某个参数为this 指针。
--------------------------------------------------------------------------------
2. const 修饰的元素
--------------------------------------------------------------------------------
const char *p=NULL;
const char *p1="abc";
const char *p1="123";
p = p1;
p = p2;
如上写法,并不是说不能改变const 指针, 而是不能改变const 指针所指内容。
const 修饰的是*
char * const p="123"; 则p 所指位置不能再改变。
const 修饰的是 p 而不是 *;
--------------------------------------------------------------------------------
3. c++比c在编译,连接时进行了更加严格的检查.
--------------------------------------------------------------------------------
这个概念是我是知道的,例如更加严格的数据类型检查,包括指针类型检查等.
还有另一种情况,将c在连接期发现的错误,提到了编译器. 举例如下:
#include <stdio.h>
int main()
{
weiweiwei(100);
return 0;
}
这段代码,存成main.c , 编译可通过,连接不通过.
$ gcc -c -o main.o main.c
$ gcc -o main main.o
main.o: In function `main':
main.c:(.text+0xf): undefined reference to `weiweiwei'
collect2: error: ld returned 1 exit status
编译通过说明c语言认为, 没有函数原型的函数默认是存在的, 你必需要自己保证传递传递参数正确.
到连接时,它会从众多obj文件或者库文件中找到这个名字把它连接在一起.
把这段代码存成main.cpp, 编译直接通不过, 为什么?说你函数原型未声明.
$ g++ -c -o main.o main.cpp
main.cpp: In function ‘int main()’:
main.cpp:4:15: error: ‘weiweiwei’ was not declared in this scope
weiweiwei(100);
由此可见,c++更加的严格, 其实也更合理.
c 更加宽泛一些,允许你不声明就使用, 不过正确性由你自己保证.
但如果你先声明了类型,再调用,c编译器也能保证你调用参数的正确性.
本贴主要是提示原来c可以不声明就调用, 看到有些代码是这样的(倒是简洁),甚是诧异,才一探究竟!
--------------------------------------------------------------------------------
4. 关闭gcc 的警告语法
--------------------------------------------------------------------------------
我使用如下的语句.
//诊断-忽略:(关闭警告)
#pragma GCC diagnostic ignored "-Wunused-variable"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
--------------------------------------------------------------------------------
5. C++中include-what-you-use(iwyu)去除多余头文件
--------------------------------------------------------------------------------
ubuntu18 中安装方法:
sudo apt-get install iwyu