-
如何判断一段程序是由C 编译程序还是由C++编译程序编译的?
C++语言是一种面向对象编程语言,支持函数重载,而C语言是面向过程的编程语言,不支持函数重载,所以函数被C++编译后在库中的名字与C语言不同
-
函数重载的原理是什么?
名字改编(name mangling),C++编译器会根据参数类型、个数、顺序的不同而改编。
-
inline函数与带参数的宏定义的区别?
1、在预编译时期,宏定义在调用处执行字符串的原样替换(宏展开)。在编译时期,内联函数在调用处展开,同时进行参数类型检查,宏定义不会进行参数类型检查。
2、内联函数首先是函数,可以像调用普通函数一样调用内联函数。而宏定义往往需要添加很多括号防止歧义,编写更加复杂。
3、内联函数可以作为某个类的成员函数,这样可以使用类的保护成员和私有成员。而当一个表达式涉及到类保护成员或私有成员时,宏就不能实现了(无法将this指针放在合适位置)。
-
std::string与const char * 有什么区别?
前者是C++风格的字符串而后者则为C风格的字符串;
后者是以'\0'(空字符)来结尾的字符数组,且后者是不可修改的只读字符串,一般用作常量字符串;
-
空类占据的空间有多大?
空类占据的空间是1(无论是单重继承还是多重继承);
但若是虚继承则是会有虚指针,占据8(64位情况下)
-
一个空类会自动创建哪些函数呢?
默认构造函数(无参);
拷贝构造函数;
默认赋值函数;
析构函数;
-
c++中对象的初始化与赋值的区别?
当对象在创建时获得了一个特定的值,我们说这个对象被初始化。初始化不是赋值,初始化的含义是创建变量赋予其一个初始值,而赋值的含义是把当前值擦除,而以一个新值来替代。对象初始化可以分为默认初始化、直接初始化、拷贝初始化以及值初始化。