1.static全局变量/全局变量,static函数/普通函数,函数中static变量/函数中的变量,类中的static成员变量/普通类成员变量区别
答:
static Global variable: 文件作用域:只在声明的文件中有效,其他源文件中不可见;同时有了static的生命周期
Global variable:文件作用域:可以加上extern 声明为外部变量,跨文件作用域
static (Global) Function: 有文件作用域,只在本文件中使用
Global Function:无文件作用域
static Member (in Function) variable:函数调用完成后,变量保存状态,再次调用函数,不会重新分配空间
Member(in Funcition) variable:函数内的生命周期
static Member(in Class) variable: 属于类范围,
Member(in Class) variable:属于类派生的特定对象,生命周期和对象一致
2.为什么要加extern"C"
答:
C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。
3.new/delete和malloc/free有什么区别
答:
用new分配的对象会调用对象的构造函数,delete则会调用对象的析构函数
而malloc和free从不调用构造和析构函数,他们只是简单的分配内存
4.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
答:
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
5. (a)一个指向函数的指针,该函数有一个整型参数并返回一个整型数
(b)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
答:
(a) int (*a)(int);
(b) int (*a[10])(int);
6.const int a;
int const a;
const int *a;
int * const a;
int const * a const;
答:
两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型 数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数 是不可修改的,同时指针也是不可修改的)。
7.给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。
答:
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void)
{
a |= BIT3;
}
void clear_bit3(void)
{
a &= ~BIT3;
}
8.explicit的作用和举例
答:
是为了防止单参数的构造函数的隐式转化。比如说有一个类 Rational 表示一个复数,如下:
class Rational
{
public:
int _x;
int _y;
Rational( int x = 0,int y = 0 )
{
_x = x;
_y = y;
}
};
void printValue(const Rational& ra)
{
cout < < ra._x < < ra._y < <endl;
}
如果是不用explicit 关键字,则象下边的东西也是合法的:
int x;
printValue( x );
如果用了explicit 关键字,这个是不合法的,我们一定要写成如下格式:
printValue( Rational( x ) )才成,这样就避免了隐式转化带来的bug。