C++
文章平均质量分 62
蒸蒸日上烫烫烫,年年有余屯屯屯!
anlian523
人若无名,专心练剑!
展开
-
VS工程中报错 常量中有换行符
环境window10简体中文,所以系统环境是:GB2312,代码页936。vs工程中没有设置 源字符串集,即没有设置/source-charset,当然也没有设置 /utf-8。(另外,vs工程中,也可以单独对某个文件进行 字符集 设置的。也没有进行这样的设置)工程中大部分的文件都是按照GB2312编码来存储的。问题产生此时工程中添加了一个utf-8编码来存储的文件。文件有一行std::string sss = "廿";然后编译报错:常量中有换行符。问题解决解决方法当然就是把这个特殊文件原创 2021-12-23 17:02:45 · 9837 阅读 · 3 评论 -
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) 的更好方案
在c++里面用来打log你可能会用到如下宏定义#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)strrchr函数寻找目标字符串中,第二个参数(字符类型)最后出现的位置(返回的是指针),但这个函数在没有找到第二个参数时返回空指针。假如你的源文件路径为your/path/t...原创 2019-10-27 16:58:44 · 3941 阅读 · 0 评论 -
c++ 返回变量和返回变量引用
区别函数的返回时的主要区别在于,函数体返回值后是否有&,而跟return后面怎么跟的无关。可以这么认为,return语句和函数体返回值会形成一次赋值关系(作=操作)。函数返回的是非引用类型时,函数会创建临时对象。sale add(const sale& lift, const sale& right) { //省略 return sum; //函数体返回值后没...原创 2019-07-14 18:00:12 · 2704 阅读 · 2 评论 -
const对象只能调用const成员函数
常量成员函数 (const member function), 可读取类中的数据成员,但不能修改。利用这个特性来对成员函数加以修饰。const对象是不可以调用类中的非const成员函数。原因之后解释。假设现在有如下代码:class test{ int i;public: void print(); test(int i);};test obj1(12);obj1.p...原创 2019-07-13 22:38:52 · 5262 阅读 · 4 评论 -
const_cast的使用:添加或去掉const、常量折叠
避免未定义行为一个变量在使用const_cast去掉指针或者引用的const限定符后,“如果常量本身不是常量,获得的权限是合法的, 如果本身是常量,使用const_cast再写的后果是未定义的。”int main(){ const int a = 1; int & b = const_cast<int&>(a); b = 2; cout << a...原创 2019-07-13 16:09:15 · 13711 阅读 · 5 评论 -
C++多维数组的遍历以及初始化
使用范围for + auto是一种比较方便的方法来遍历多维数组,只需要知道有多少个维度,再建立多少个循环即可。关键是不容易写错。...原创 2019-05-25 20:41:37 · 3089 阅读 · 0 评论 -
数组名和指针的区别和联系、数组名取地址&a
数组a和指针p的构成是很相似的。它们实际存的都是一个地址。但它俩自身又有不同,指针本身是一个对象,在内存中是为其分配了空间的;但数组名在内存空间中没有分配到空间(这将导致`&a`操作的效果可能和预想的不大一样)原创 2019-05-19 17:10:55 · 3530 阅读 · 0 评论 -
C++ 类型别名为指针类型时,const的修饰情况
如果类型别名指代的是复合类型,那么把它用到声明语句中产生的效果会和预想的不一样(预想的就是把别名替换为所指代的内容,再判断其数据类型)。使用typedef typedef char * pstring; pstring a = 0; const pstring cstr = 0; const char * cstr1 = 0; const pstring *ps = 0; con...原创 2019-05-17 10:45:18 · 814 阅读 · 0 评论 -
C++ 虚函数详解(虚函数表、vfptr)——带虚函数表的内存分布图
引用或指针的静态类型与对象本身的动态类型的不同,才是C++支持多态的根本所在。当使用基类的引用或指针调用一个虚函数成员时,会执行动态绑定。所有的虚函数都必须有定义,因为编译器直到运行前也不知道到底要调用哪个版本的虚函数。只有通过指针或引用调用虚函数才会发生动态绑定,因为只有这种情况,引用或指针的静态类型与对象本身的动态类型才会不同。原创 2019-05-16 23:44:49 · 2483 阅读 · 3 评论 -
C++ 零散基础笔记
用字符串字面值初始化char s[4] = &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;str&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;;const char *p = &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;str&amp;amp;amp;amp;amp;amp;am原创 2018-10-31 13:00:37 · 298 阅读 · 0 评论 -
C++的顶层const和底层const的理解
按照c++ primer里面的描述习惯,认为对象为“具有某种数据类型的内存空间”。本文使用IDE为VS2017 社区版。const与引用:对常量的引用(reference to const) const int ci = 0;//常量int对象 int &amp;amp;amp;amp;amp;amp;a = ci;//报错第二个提示说得很清楚,将 “int &amp;amp;amp;amp;amp;amp;” 类型的引用绑定到 “const int” 类型的初始原创 2018-10-06 21:24:35 · 7226 阅读 · 2 评论