1、变量的作用域。
没想到,可以直接使用::vac++;来引用全局变量。
#include <iostream>
using namespace std;
int Vac=3;
int main()
{
int Vac=10;
::Vac++; // 如果没有定义局部变量Vac,也是可以直接引用全局变量的。但是这里通过Vac只能引用到局部变量,要想引用全局变量,只能使用::Vac, 这些解读,都是由编译器来完成的吧... 两个作用域不同的变量,虽然变量名相同,但并不是同一个变量
cout << ::Vac << endl;
cout << Vac << endl;
return 0;
}
输出时4 10
2、事后计算(或者说先返回值,之后的自增才生效?)
int i=1,j=2;
k = i+++j;
k的值是3,之后i的值是2.
3、连乘
#include <iostream>
using namespace std;
int main()
{
int i = 3;
cout << i++*i++ << endl; // 开始把输出结果写成12了,第一个返回3,加法在之后生效,所以返回4,3*4=12,其实错了,由于两个优先级相同,都是先返回3,乘法运算使用的是3*3,之后自增运算才生效?
cout << i << endl; //输出的结果是5
}
4、编程风格。
if('A'==a) {
a++;
} // 这种编程风格要好些。避免了把"=="误写为"=",因为编译器不允许对常量赋值,就可以检查到错误。
if(a=='A') {
a++;
}
5、类型转换,原来unsigned int在 int之上。
-20从int转换为 unsigned int,值为11111111 11111111 11111111
11101100, 这里最后的数字不能搞错。全1实际上对应的值是-1,-20 = -1 -19,可以通过补码计算得到。。。
unsigned int a = 6;
int b = -20;
char c;
(a+b>6)?c=1:c=0;
最后c的值是1,无符号数对于嵌入式系统更为重要。
即使是猜,可以得出c=1,详细分析过程不出错,则要要有清晰理解。
6、C++程序中,
调用C编译器编译后的函数,为什么要加extern "C"
extern "C" {} 是告诉编译器,括号里面的代码需要按照C的格式进行编译,
连接时要按C得命名规则去找。
C++支持函数重载,C语言不支持函数重载。函数被C++编译器编译后在库中的名字与C语言的不同。假设某个函数的原型为:void foo(int x, int y)。该函数被C编译器编译后在库中的名字为_foo(),而C++编译器则会产生_foo_int_int之类的名称。
C++提供了
C连接交换指定符号 extern "C"
解决名字的匹配问题。
由于C++支持重载,仅仅靠函数名还是不能确定函数的,还要根据参数列表。
7、判定是C++编译器还是C编译器。
通过宏, __cplusplus和_STDC_
8、new和malloc的区别。
2008-8-26 提问过,呵呵
C++中new和malloc,C中只有malloc。两者申请到的内存都在堆上。new申请到的内存要用delete释放,malloc申请的内存则要用free进行释放。
new是C++所特有的,为什么一定要有new呢? 每样语言机制的设计,都是有其存在理由的,当申请到一块内存,并需要做初始化时,new就发挥作用了,它可以调用构造函数的。 而这是C语言所不具备的特性。
9、int const& max(int const& a, int const& b) 和int max(int a, int b) 有什么区别啊?
2008-07-30 20:33:44提问过
前者的效率会高一些,特别当传入的参数,或者返回的参数是比较大的对象时。因为后者会拷贝复制临时变量。
中间提及了引用和指针的区别。
引用必须在定义时候初始化,引用一旦初始化就不能改变引用的对象 10、无临时变量参数调换
用^异或操作更佳,如果两个数据较大,不会发生溢出
11、
内存泄露问题。
下面代码直接退出会造成内存泄露吗?
struct A {
char* name;
}
main()
{
struct A test;
test.name = "name1"; // C的内存管理和C++是不同的,但是如果使用C++编译器,则使用相同的机制?
其实各个编译器,具体可能也有区别的。
struct A *test2 = (struct A*)malloc(sizeof(struct a)); // malloc分配的应该是堆上的空间吧,必须free掉吗?
test2.name = "name2";
}
091027 栈上是一定会释放掉的。
12、i++, ++i哪个性能高
++i
这个题目应该用滥了吧,ali研究院也在用,呵呵
13、生成临时对象的几种方式。
a、赋值 b、类型转换 其他的呢?
14、 A a, b, c; a=b=c; 会有问题吗? //
其实这些是考虑对语言拐弯抹角处的掌握。。。b=c如果返回类型不是A,会报错? X
有可能也是错的,因为从其他类型自动转换成A类型还是有可能的。
b=c类型不是A,有可能会报错。因为没法转换成A类型。
posted on 2009-09-05 16:58
thinke365 阅读(157)
评论(0) 编辑 收藏 引用 所属分类:
note