共 48 篇文章 |
|
Memory blocks for arrays are allocated from different memory chunks than those used for single-object memory allocations.Whenever a user requests memory for an object of, say, ‘m’ bytes, the size of object is converted to the nearest block size ‘n’, for which there is a free-list that stores blocks of size ‘n’.A... 阅63 转0 评0 公众公开 20-01-14 11:34 |
如果函数的参数是一个指针,不要指望用该指针去申请动态内存。String test1("第一个范例。");String test2("第二个范例。");String test3("第三个范例。");String test4("第四个范例。"); cout<<"下面分别输入三个范例:/n";cout<<test1<<endl;cout<<test2<<endl;cout<<test3<... 阅39 转0 评0 公众公开 20-01-14 11:33 |
C++11新特性不定参数函数。它是一种新的模板参数类型,有了这样的参数类型就可以允许模板参数接受任意多个不同类型的不同参数。//偏特化版本template<typename HEAD, typename ...TLIST>class mytuple<HEAD, TLIST...> : public mytuple<TLIST...>{public: mytuple(HEAD head, TLIST... args) : mytuple<TLIST...>(arg... 阅204 转0 评0 公众公开 19-11-07 16:59 |
那么,在stastic_assert提交到C++0x标准之前,为了弥补assert和#error的不足,出现了一些第三方解决方案,可以作编译期的静态检查,例如BOOST_STATIC_ASSERT和LOKI_STATIC_CHECK,但由于它们都是利用了一些编译器的隐晦特性实现的trick,可移植性、简便性都不是太好,还会降低编译速度,而且功能也不够完善,例如BOOST_STATIC_ASSERT就不能定义... 阅62 转0 评0 公众公开 19-04-30 18:09 |
检查实体的声明类型或表达式的类型及值分类。2) 若参数是指名非类型模板形参的无括号 id 表达式,则 decltype 生成该模板形参的类型(在任何需要的类型推导后,若该模板形参以占位符类型声明)。注意若用括号括着对象名,则把它当做通常的左值表达式,从而 decltype(x) 和 decltype((x)) 通常是不同的类型。decltype 在声明难以或不可能以标准... 阅40 转0 评0 公众公开 19-02-25 11:01 |
2.decltype 类型推导。对于int (*(*pf())()) () { return nullptr; }: (1)该函数的返回类型为int(*)(), 是一个指向返回类型为int,参数列表为空的函数的指针;// 为了让编译器推导出来,应当进行显示类型转换 g(nullptr); // 编译失败,nullptr的类型是nullptr_t,而不是指针 g((float*)nullptr); // T* 为 float*类型 h(0); // T 为 整型 h(... 阅70 转0 评0 公众公开 19-02-25 10:58 |
类域:如果在成员函数作用域内查找不到相应名字对象声明,接着在类作用域内查找,沿着继承体系上溯查找,一旦找到相应名字对象在类作用域内的定义,查找 结束,查找过程中对象类型被忽略,对象访问权限被忽略,因此子类成员对象名字定义会屏蔽父类成员对象名字定义(隐藏的本质)类外围作用域:如果在类继承体系内找不到相应名字对象定义,接着... 阅76 转0 评0 公众公开 19-02-25 10:54 |
类域:如果在成员函数作用域内查找不到相应名字对象声明,接着在类作用域内查找,沿着继承体系上溯查找,一旦找到相应名字对象在类作用域内的定义,查找 结束,查找过程中对象类型被忽略,对象访问权限被忽略,因此子类成员对象名字定义会屏蔽父类成员对象名字定义(隐藏的本质)类外围作用域:如果在类继承体系内找不到相应名字对象定义,接着... 阅278 转0 评0 公众公开 18-08-31 17:32 |
全局变量、文件域的静态变量和类的静态成员变量在main执行之前的静态初始化过程中分配内存并初始化;局部静态变量在编译时,编译器的实现一般是在初始化语句之前设置一个局部静态变量的标识来判断是否已经初始化,运行的时候每次进行判断,如果需要初始化则执行初始化操作,否则不执行。针对局部静态变量初始化的线程安全性,g++编译器的实现相... 阅334 转0 评0 公众公开 18-08-31 11:00 |
一般情况下,我们只需要知道分成编译和链接两个阶段,编译阶段将源程序(*.c) 转换成为目标代码(一般是obj文件,至于具体过程就是上面说的那些阶段),链接阶段是把源程序转换成的目标代码(obj文件)与你程序里面调用的库函数对应的代码连接起来形成对应的可执行文件(exe文件)就可以了,其他的都需要在实践中多多体会才能有更深的理解。C/C... 阅47 转0 评0 公众公开 18-08-24 15:47 |