面试遇到的题目

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值