C\C++\Qt中对0\NULL\nullptr定义的不同
NULL是宏定义,nullptr是C++关键字
C中NULL是指向0的空指针,C++中NULL是0,nullptr是空指针标识
C++中^运算符是异或
Matlab中^是幂运算,C++中幂运算是pow(a,b)即a的b次方
C++矩阵运算库Eigen
利用C++模板编程的思想编写的模板库,不支持库链接方式编译
使用时直接#include文件路径,如#include "Eigen/Dense"
C++全局变量
定义在头文件类定义之外或者源文件函数体之外,不同于宏定义,比如#define PI 3.14,可以被视作任何基本类型,全局变量在定义时需要声明类型。
static和extern型区别:前者为静态全局变量(内部),作用域仅在该头文件/源文件,其他文件即使#include了该头文件仍然不可调用,作为一种对全局变量的保护;后者为外部全局变量(动态),作用域在所有包含了该头文件的源文件中。
在使用extern时,需要先在某个头文件中定义extern type variable,然后在需要调用该变量的源文件中调用该头文件,并且重新声明type variable。但是在Qt中各源文件之间最多只能声明一次,否则会出现重定义错误;在C++中理论上来说,每个调用该变量的源文件都应该声明该变量。
相应的,static修饰的函数,也只能在该源文件中调用;尽可能不要用extern修饰函数,而是使用类中的成员函数,在需要调用该函数的源文件中,包含该类的头文件,就可以通过类名::函数名来访问。
C++不支持在程序运行中再通过字符串去定义变量名字
而是在程序编译时就已经将变量转换为了地址
这是静态语言和动态语言(如python等)区别之一
C++多个cpp引用同一个h所导致的函数重定义问题
检查pro中HEADERS+=和SOURCES+=没有重复引用
#ifndef #define 或者 #pragma once也都无法解决
尽量不要在h中直接定义函数,而是将函数定义在类中或者作为inline内联函数
C++定义宏不能以数字开头
意味着h、cpp等均不能以数字开头
Qt C++调用python常见问题
Python文件不能取名为test函数名不能取名为func
Python文件需要拷贝到debug文件夹中才能正常调试和运行
初始化python和结束进程需要放到调用python的循环之外 否则导入模块失败
第二次还是会失败 所以直接放到构造和析构函数中去
C++传入和传出Python用的都是PyTuple元组
元组元素个数和python函数的输入输出参数一致
元组的元素可以是整型、浮点、字符、列表等等