
C/C++
文章平均质量分 74
silenci
宅若久时天然呆,呆到长时自然萌
展开
-
用宏定义的形式书写代码块
今天读一个ip传输文件的小例子,看到一个宏定义是这样的:#define TimeBlock(_out, _block) \ struct timeval start; \ struct timeval end; \ struct timeval delta; \ gettimeofday(&start, NULL); \ _block \ get原创 2016-02-28 18:50:04 · 3281 阅读 · 2 评论 -
编译错误storage class specified for parameter XXX
考虑如下两个头文件test.h和main.h//test.h#include<stdio.h>void add(int a, int b)//main.h#include"test.h"typedef struct A_{ int data;} A;void del(int a);编译器编译时,会将main.h内include的文件展开,即main.h变为://ma...原创 2018-02-26 09:09:47 · 27830 阅读 · 4 评论 -
C++多态:深入虚函数,理解晚绑定
C++的多态特性是通过晚绑定实现的。晚绑定(late binding),指的是编译器或解释器程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需要检查对象是否支持特性和方法即可。 在C++中,晚绑定通常发生在使用virtual声明成员函数时。此时,C++创建一个虚函数表,当某个函数被调用时需要从这个表中查找该函数的实际位置。通常,晚绑定也叫做动态函数分派(dynamic disp原创 2017-05-26 09:34:39 · 1591 阅读 · 0 评论 -
C++多态:深入CRTP,理解编译期的多态
虚函数带来的额外CPU消耗 考虑如下的代码:class D {public: int num; D(int i = 0) { num = i; } virtual void print() { cout << "I'm a D. my num=" << num << endl; }};class E :public D {public: E(int i = 0原创 2017-06-08 11:20:51 · 1224 阅读 · 0 评论 -
Likes Dislike Improving Performance in C++ with Compile Time Polymorphism
来源:https://www.gamedev.net/resources/_/technical/general-programming/improving-performance-in-c-with-compile-time-polymorphism-r2015Virtual functions are one of the most interesting and useful features转载 2017-06-08 08:57:06 · 377 阅读 · 0 评论 -
STL:深入mem_fun
mem_fun所用的模板的具体化 仿函数是一种具有函数特质的对象,由于内部重载了括号操作符(),所以调用者可以像使用函数一样使用仿函数。 mem_fun()是一个适配器(adapter),该函数能将类的成员函数包装成仿函数使用,于是成员函数可以搭配各种泛型算法完成所谓的多态调用。 具体例子如下面的代码所示。用vector<D*>存放E和F的指针,在泛型算法for_each()中使用D的成员函数p原创 2017-05-24 18:32:23 · 2251 阅读 · 0 评论 -
C++接口定义及实现举例
一、接口的定义 有时候,我们得提供一些接口给别人使用。接口的作用,就是提供一个与其他系统交互的方法。其他系统无需了解你内部细节,并且也无法了解内部细节,只能通过你提供给外部的接口来与你进行通信。根据c++的特点,我们可以采用纯虚函数的方式来实现。这样做的好处是能够实现封装和多态。现举一实例,供大家参考。(不想做过多说明,大家一看就应该能够明白)Class IPerson转载 2016-06-29 22:32:50 · 556 阅读 · 0 评论 -
C++的tips(不定期更新)
1.cinchar s[10];cin.get(s,10);while(cin&&cin.get()!='\n');比如说输入了15个字符,前10个字符放入了s中,剩下的5个字符就被滤掉了。2.static又一次把一个静态变量定义在头文件里了,两个cpp包含了这个头文件,断点调试的时候发现cpp文件中的函数可以使用这个静态变量,但是好像是编译器自动创建了该变量的副本供c原创 2016-06-03 15:54:03 · 293 阅读 · 0 评论 -
类的对象和类的指针的区别
#include #include using namespace std; class Student { public: static int number; string name; public: Student() { } void set(string str) { name = str; number++;转载 2016-03-13 17:00:30 · 346 阅读 · 0 评论 -
关于winform数据库例程编译时显示的检索类工厂com错误(sqldmo.dll)
网上有很多关于数据库的例程,winform的居多,下载了好几个,都在编译的时候发生了错误:检索COM 类工厂中的{XXXX}组件时失败,没有注册类别 -2147221164(80040154),错误定位到的是sqldmo.dll。 进入解决方案->引用->添加引用 选择com标签 下的Microsoft SQLDMO然后就生成此文件了!(注:sql2008取消了此东东,需要下载Micro原创 2016-02-28 11:06:04 · 481 阅读 · 0 评论 -
记录一个诡异的函数调用返回错误的指针bug
//main.c#include "test.h"void main(){ S* s = get_struct_s(); printf("%s\n",s->name); return 0;}//test.htypedef struct S_{ ... char name[8];} S;S* s_array[10];//test.c#inc...原创 2018-05-30 15:20:33 · 450 阅读 · 0 评论