小弟我也发几个问题
我也发几个小问题。
1.
class Test
{
};
Test* pTest = new Test();
会不会调用所谓的构造函数,如果我没有声明一个构造函数。
或者说是否存在call 指令。
:答案看我blog。
2.
const int i = 5;
int* c = const_cast<int*>(&i);
*c = 6;
cout<<i;
输出多少? 为什么?
------解决方案--------------------
1. 明显不写不会,自己写了明显会!
不写call也没有
2. 常量折叠?
const int i = 5; //常量分配了内存(和变量很像),只是你想用i=6这样编译器会耍流氓
int* c = const_cast <int* >(&i); //你耍流氓强转
*c = 6; //可以,常量地址里面的内容被改了
cout<<i; //哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
------解决方案--------------------
1 不CALL
2 哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
1.
class Test
{
};
Test* pTest = new Test();
会不会调用所谓的构造函数,如果我没有声明一个构造函数。
或者说是否存在call 指令。
:答案看我blog。
2.
const int i = 5;
int* c = const_cast<int*>(&i);
*c = 6;
cout<<i;
输出多少? 为什么?
------解决方案--------------------
1. 明显不写不会,自己写了明显会!
不写call也没有
2. 常量折叠?
const int i = 5; //常量分配了内存(和变量很像),只是你想用i=6这样编译器会耍流氓
int* c = const_cast <int* >(&i); //你耍流氓强转
*c = 6; //可以,常量地址里面的内容被改了
cout<<i; //哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
------解决方案--------------------
1 不CALL
2 哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~