随笔分类 - [01]【C/C++】
摘要:noexcept修饰符与noexcept操作符 首先,明确一点: 在C++11之后,表示函数不会抛出异常的动态异常声明throw()被新的noexcept异常声明所取代。 在通常情况下,在C++11中使用noexcept可以有效的阻止异常的传播与扩散。 【1】noexcept修饰符 从语法上讲,no
阅读全文
摘要:【1】assert 与 #error 我们知道,C++现有的标准中就有assert、#error两个方法是用来检查错误的,除此而外还有一些第三方的静态断言实现。 assert是运行期断言,它用来发现运行期间的错误,不能提前到编译期发现错误,也不具有强制性,也谈不上改善编译信息的可读性。 既然是运行期
阅读全文
摘要:【1】__cplusplus 在C与C++混合编写的代码中,常常会在头文件中看到如下形式的声明: 这种类型的头文件可以被#include到C文件中进行编译,也可以被#include到C++文件中进行编译。 关键点:由于extern"C"可以抑制C++对函数名、变量名等符号(symbol)进行名称重整
阅读全文
摘要:【1】变长参数的宏定义以及__VA_ARGS__ 在C99标准中,我们就已经可以使用变长参数的宏定义。 变长参数的宏定义是个神马?就是在宏定义的参数列表中最后一个参数为省略号。 而现在C++ 11中,使用预定义宏__VA_ARGS__可以在宏定义的实现部分替换省略号所代表的字符串。 原书示例: 定义
阅读全文
摘要:【1】__func__预定义标识符 很多现代的编译器都支持C99标准中的__func__预定义标识符功能,其基本功能就是返回所在函数的名字。 常见的用法,看下面这个例子: 上例中,定义了两个函数hello和world。利用__func__预定义标识符,我们返回了函数的名字,并将其打印出来。 事实上,
阅读全文
摘要:【1】__pragma 与 #pragma 的区别 在C/C++标准中,#pragma是一条预处理的指令(preprocessor directive)。 简单地说,#pragma是用来向编译器传达语言标准以外的一些信息。 举个常见的例子,如果我们在代码的头文件中定义了以下语句: #pragma o
阅读全文
摘要:C++ Primer Plus (六) 1 预备知识 2 开始学习C++ 3 处理数据 3.1 简单变量 3.1 limits.cpp 3.2 exceed.cpp 3.2 const限定符 3.3 浮点数 3.4 C++ 算术运算符 3.5 总结 3.6 复习题 3.7 编程练习 4 复合类型 5
阅读全文
摘要:【1】C++数据类型 为了不再重复造轮子,特别推荐菜鸟教程《C++数据类型》 补充: C++11新增数据类型:long long、unsigned long long和char16_t(16位字符编码)、char32_t(32位字符编码)。 Good Good Study, Day Day Up.
阅读全文
摘要:【1】main函数 【2】main() 经典的C风格函数头,如下: 在C语言中,省略返回类型相当于说函数的类型为int。 但是,需要明确,C++逐步淘汰了这种用法。 另外,在C语言中,让括号空着意味着对是否接受参数保持沉默。 【3】int main() 和 int main(void) 在C++中,
阅读全文
摘要:【1】基础部分 (1)宏定义 《assert》 《offset宏》 《#pragma once》 《宏定义学习》 《预处理语句》 《#if 0 #end if》 《C语言 宏定义的1<<0 与 直接定义1 有什么区别》 《区分不同操作系统、编译器不同版本的宏》 《宏和函数的区别(一个BUG的总结)》
阅读全文
摘要:【1】示例程序 如下示例代码: 如上。 【2】总结 运算符(+ 和 <<)优先级不同,可能会导致结果差异。 实事求是、因地制宜、具体情况具体分析。 Good Good Study, Day Day Up. 顺序 选择 循环 总结
阅读全文
摘要:【1】后置++(基本内置类型) 【2】自定义类型 示例代码如下: 分析总结: (1)两种类型(内置类型、自定义类型)前置++和后置++的表现是一致的。 (2)前置++:自增1,返回对象本身。 (3)后置++:直接加1,但是,返回的是加1前的对象(临时对象)。 综上所述,a = a++; 这一句的执行
阅读全文
摘要:【1】作用 确定文件的访问权限 【2】头文件 #include <unistd.h> 【3】函数定义 int access(const char * pathname, int mode); 【4】参数说明 pathname: 需要检测的文件路径名 mode: 参数为0时,表示检查文件的存在性,如果
阅读全文
摘要:【1】不同操作系统的宏 可以参考QtCore/qsystemdetection.h文件: 各种操作系统的宏定义。 【2】不同编译器不同版本的宏 (1)不同编译器 1.1 Visual C++ 编译器预定义宏:C/C++ Predefined Macros 1.2 GCC 编译器预定义宏:GNU Co
阅读全文
摘要:【1】QString 转换为string 1 QString qString("好好学习天天向上"); 2 std::string stdString = qString.toStdString(); 3 QTextCodec* pCode = QTextCodec::codecForName("g
阅读全文
摘要:工作项目中,利用到Qt对话框,场景需求: 1. 一部分窗体需要继承自QWidget 2. 一部分窗体需要继承自QDialog 3. 两者均需要去掉标题栏图标,同时能够自由拖动。 如果两者分开继承实现,会造成设置windowFlags、拖动功能部分代码重复冗余,为了达到代码复用的目的,利用模板类进行了
阅读全文
摘要:【1】QString字符串不支持双引号 最近做项目(本地环境:WIN10 + QT5.9.2 + VS2017)。有个需求,需要实现形如 "key="123456"" 这样的字符串。 查了很多资料,发现QString是没法实现愿望的。 但是,std::string可以实现字符中双引号的夙愿,只要加反
阅读全文
摘要:【1】如下代码及编译错误 如标题,不做赘述。 【2】原因及解决方案 原因:之所以报如上编译错误,因为静态成员变量未初始化。 解决方案:类中静态成员需要在类外进行初始化。其格式为:类型 类名::静态成员变量名 = 默认值; 初始化后,再编译。结果如下图: Good Good Study, Day Da
阅读全文
摘要:【1】.cpp文件 【2】.h文件 【3】效果图 如上所述,不做赘述。 Good Good Study, Day Day Up. 顺序 选择 循环 总结
阅读全文
摘要:【1】.pro 【2】.h 【3】.cpp 【4】main 【5】验证一个问题 Good Good Study, Day Day Up. 顺序 选择 循环 总结
阅读全文