c++
文章平均质量分 65
Be long
What's your choice? Depend on what you can chose.
展开
-
C++ 传指针和传引用的区别
以下是自己的理解,如果看不懂可以看这个参考网页,讲的很好。传指针调用:本质上是传值调用,只不过传的实参的地址。被调函数会新定义一个指向存放同类型变量值的指针,该指针值为实参的地址。当被调函数需要访问形参的值时,需要两步操作,首先寻找形参指针的值a(是一个地址),然后根据值a来访问真正对应实参所对应的值(即找到值a这个地址指向的内存,读取该内存储存的值)。传引用调用:这也是会传输实参的地址,被调函数同样也会新定义一个变量,但是这个变量名代表的就是对应实参的地址,可以使用这个变量名直接访问实参的值.原创 2021-07-19 17:38:57 · 669 阅读 · 0 评论 -
C++模板函数 --接口与实现分离
问题写模板函数的时候,使用定义(a.h)与实现(a.cpp)分离的方式,结果一直报错对模板函数“未定义的引用”。使用nm命令查看a.o文件,发现没有模板函数的名字。很是奇怪。原因看了参考【1】(强烈建议看一下)才知道,这是因为C++标准规定,模板函数在没有被调用的时候,就不会被实例化。因此main函数编译成.o文件时候,因为仅包含了a.h文件,没有模板函数的具体实现,只能寄希望于链接时ld在其他的.o(这里是a.o)文件中找到模板函数的实现,但是a.cpp编译成a.o文件的时候,因为a.cpp中没有原创 2021-06-29 17:22:44 · 1463 阅读 · 0 评论 -
Global Array(GA)函数库的安装、使用
使用ga++,编译出现大量基础函数的未定义引用(base) [Js@XiaoXin13pro ga]$ makempicxx -o test_ga test_ga.o -I/home/Js/tool/openblas/include -I/usr/local/include -L/usr/local/lib -lga -lga++ -larmci -lm -lcomex -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -lgfortran -lboost_seria.原创 2021-05-12 21:12:34 · 1267 阅读 · 3 评论 -
编译Boost.mpi
1 最后链接为可执行文件时出现未定义的引用 \n=== LINK bin/tests.x./obj/test_fci.o ./obj/test_dvdson.o ./obj/test_hamiltonian.o ./obj/test_integral.o ./obj/test_linalg.o ./obj/test_tools.o ./obj/test_matrix.o ./obj/test_onspace.o ./obj/test_onstate.o ./obj/test_sci.o ./obj/te原创 2021-04-30 16:58:31 · 514 阅读 · 1 评论 -
c++: 不使用typeid查看变量类型
转载自auto and delctype(auto) type deduction example一个让编译器输出变量类型的小技巧:定义如下结构体template <typename>struct TD;然后使用如下方法查看变量variable的变量类型TD<decltype(variable)>();解释TD<…> 是一个不完整的类型, 编译器会报错,输出如下信息:error: invalid use of incomplete ty.原创 2021-01-14 20:09:51 · 184 阅读 · 0 评论 -
c++的数据类型汇总
真乱,还是java好。来自于Fundamental types原创 2021-01-10 21:46:38 · 175 阅读 · 0 评论 -
c++虚函数:父类与子类虚函数的形参不一样会发生什么?
摘抄,部分关于虚函数的总结如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联编)如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合语法习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义)如果基础类和衍生类定义了相同名称的成员函数(包括参数相同),那么通过对象指针调用成员函数时,到底调用那个函数要根据指针的原型来确定,而不是根据指针实际指向的对象类型确定。虚函数就是为了对.原创 2021-01-10 16:37:37 · 6651 阅读 · 1 评论 -
c++中的空指针初始化
当使用int *p定义了一个指针变量*p后,仅仅是定义了这个指针的名字,还没有为他分配内存空间,如果这个时候对其进行赋值*p=3会有如下报错Segmentation fault (core dumped)有两种办法可以解决使用new函数为定义的空指针分配空间int *p;p=new int;定义指针时进行初始化int a=520;int *p=&a;...原创 2020-05-27 11:36:40 · 790 阅读 · 0 评论 -
BDF编译:明明链接了mpi的函数库还是报错“对mpi_init_未定义的引用...“//链接为可执行程序指定了库仍旧显示对函数未定义的引用【已解决】
问题在编译程序的时候,需要用到mpi的库,这里使用openmpi作为mpi的实现,在编译程序中需要用到mpi库的模块时,命令是这样的mpicc -o some_mod -lsome_lib ...大题就是用mpicc 将很多的中间文件链接成一个可执行程序,然后就会报错对mpi_init_未定义的引用对mpi_barrier_未定义的引用对mpi_final_未定义的引用...就...原创 2019-05-11 23:06:01 · 5768 阅读 · 2 评论 -
extern “C”的作用详解
https://www.cnblogs.com/carsonzhu/p/5272271.html转载 2018-04-26 12:02:45 · 114 阅读 · 0 评论 -
c++命名空间
命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量转载 2017-11-28 16:29:23 · 115 阅读 · 0 评论 -
c++:成员对象,基类初始化列表 接口与实现分离
定义student(int newid, char *newname, int newage, int newclass, int newgrade);实现student::student(int newid, char *newname, int newage, int newclass, int newgrade) : card(newid), hisgrade(new原创 2017-11-28 16:21:23 · 442 阅读 · 0 评论