随笔分类 - 软件技术
编程语言,计算机软件相关
摘要:既有拷贝构造又有移动构造 这个比较好理解,普通的函数匹配规则就可以。右值移动,左值拷贝。 ——《C++ Primer》 P477 我们不能隐式地将一个右值引用绑定到一个左值。 有拷贝构造但没有移动构造 这种情况,右值也会被拷贝。 如果一个类没有移动构造函数,函数匹配规则保证该类型的对象会被拷贝,即使
阅读全文
摘要:若有多个信号绑定同一个槽: QCheckBox *ckb = new QCheckBox(this); connect(ckb, &QCheckBox::clicked, this, &MyWidget::ckb_clicked); 槽函数中判断发送者对象: void MyWidget::ckb_c
阅读全文
摘要:1)单通道图像的绘制 draw_circle (WindowHandle, Row, Column, Radius) gen_circle (Circle, Row, Column, Radius) paint_region (Circle, Image, ImageR, 0, 'fill') pa
阅读全文
摘要:▲ https://blog.csdn.net/m1059247324/article/details/116228823
阅读全文
摘要:#include<iostream> using namespace std; template<typename Head, typename ...Tail> double Max(Head first, Tail... rest) { double Maxnum = 0; Maxnum = M
阅读全文
摘要:两个例外规则 假定 i 是一个 int 对象,我们可能认为像 f3(i) 这样的调用是不合法的。毕竟,i是一个左值,而通常我们不能将一个右值引用绑定到一个左值上。但是,C++语言在正常绑定规则之外定义了两个例外规则,允许这种绑定。这两个例外规则是move 这种标准库设施正确工作的基础。 第一个例外规
阅读全文
摘要:与非模板函数一样,我们在一次调用中传递给函数模板的实参被用来初始化函数的形参。如果一个函数形参的类型使用了模板类型参数,那么它采用特殊的初始化规则。只有很有限的几种类型转换会自动地应用于这些实参。编译器通常不是对实参进行类型转换,而是生成一个新的模板实例。 与往常一样,顶层 const(参见 2.4
阅读全文
摘要:// template.hpp template<typename T> class Dylan { public: Dylan(T t); T m_data; }; // template.cpp #include "template.hpp" template<typename T> Dylan
阅读全文
摘要:这两天写了个Dll,要导出普通类中的模板函数,稍微查了一下,没查到具体资料。自己根据C++模板的编译原理,推断出应该要源码放在头文件中直接导出,查了下接触的Open Source项目,确实如此。这里记录一下,方便下次查阅。 1、宏定义说明: #ifdef DLL_PROJECT #define TE
阅读全文
摘要:MyDelegate.h #pragma once #include <typeinfo.h> #include <list> #include <vector> namespace Delegate { // IDelegate 提供接口的基类 template<typename ReturnTy
阅读全文
摘要:当编写模板时,代码不能是针对特定类型的,但模板代码通常对其所使用的类型有一些假设。例如,我们最初的compare 函数中的代码就假定实参类型定义了<运算符。 WARNING 保证传递给模板的实参支持模板所要求的操作,以及这些操作在模板中能正确工作,是调用者的责任。 ▲ 《C++ Primer》 P5
阅读全文
摘要:第一个阶段是编译模板本身时。在这个阶段,编译器通常不会发现很多错误。编译器可以检查语法错误,例如忘记分号或者变量名拼错等,但也就这么多了。 第二个阶段是编译器遇到模板使用时。在此阶段,编译器仍然没有很多可检查的。对于函数模板调用,编译器通常会检查实参数目是否正确。它还能检查参数类型是否匹配。对于类模
阅读全文
摘要:项目属性使用预编译 一个预编译.h对应一个预编译.cpp,cpp 中只包含一句 #include "stdafx.h" 右键 'stdafx.cpp' 选 'Yc/创建' 源文件中包含 #include "stdafx.h" 参考: https://www.cnblogs.com/foundwant
阅读全文
摘要:头文件中声明了方法,在提供者那里方法应该被声明为__declspec(dllexport),在使用者那里,方法应该被声明为__declspec(dllimport)。 Class中含有一个静态变量,生成dll的时候只采用了__declspec(dllexport), 使用的时候__declspec(
阅读全文
摘要:C 语言在编译器就完成静态变量的内存分配和初始化;始化发生在任何代码执行之前,属于编译期初始化。 C++ 全局或静态对象当且仅当对象首次用到时才进行构造,并通过atexit()来管理对象的生命期; 静态变量初始化是线程安全的。 全局变量、文件域的静态变量和类的静态成员变量在main执行之前的静态初始
阅读全文
摘要:exec() QDialog dlg(this); dlg.exec(); setModal() QDialog dlg(this); dlg.setModal(true); //相当于dlg.setWindowModality(Qt::ApplicationModal); dlg.show();
阅读全文
摘要:++ 和 * 混合运用简单测试 int arr[5] = { 10, 20, 30, 40, 50 }; int *p1 = arr; int res_p1 = ++ * p1; cout << "++*p1 = " << res_p1 << '\n'; // 11 先解引用,然后对解引用后的值做+
阅读全文
摘要:我们可以向一个算法传递任何类别的可调用对象(callable object)。对于一个对象或一个表达式,如果可以对其使用调用运算符(参见1.5.2节,第21页),则称它为可调用的。即,如果e是一个可调用的表达式,则我们可以编写代码e(args),其中args是一个逗号分隔的一个或多个参数的列表。——
阅读全文
摘要:▲《C++ Primer》 P352 标准库bind函数相关信息在 《C++ Primer》 P354。
阅读全文