class Test
{
};
Test* pTest = new Test();
会不会调用所谓的构造函数,如果我没有声明一个构造函数。
或者说是否存在call 指令。
:答案看我blog。
2.
const int i = 5;
int* c = const_cast<int*>(&i);
*c = 6;
cout<<i;
输出多少? 为什么?
13 个解决方案
#1
http://healerkx.spaces.live.com/
#2
骗人。blog上没有。
#3
5
#4
6
i is no longer a const type
c point to the address of a
i is no longer a const type
c point to the address of a
#5
第一题,如果没提供的话,不调用
如果提供的话就调用.
第二题,改变了,他复制了另一个内存区,改变了这个内存,但愿i不变
如果提供的话就调用.
第二题,改变了,他复制了另一个内存区,改变了这个内存,但愿i不变
#6
……来占个位子撒泡尿
其实甘草是来骗BLOG点击率的,大家不要给他骗了~
其实甘草是来骗BLOG点击率的,大家不要给他骗了~
#7
1. 明显不写不会,自己写了明显会!
不写call也没有
2. 常量折叠?
const int i = 5; //常量分配了内存(和变量很像),只是你想用i=6这样编译器会耍流氓
int* c = const_cast <int* >(&i); //你耍流氓强转
*c = 6; //可以,常量地址里面的内容被改了
cout<<i; //哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
不写call也没有
2. 常量折叠?
const int i = 5; //常量分配了内存(和变量很像),只是你想用i=6这样编译器会耍流氓
int* c = const_cast <int* >(&i); //你耍流氓强转
*c = 6; //可以,常量地址里面的内容被改了
cout<<i; //哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
#8
5
编译器才不像4楼这么傻呢
编译器才不像4楼这么傻呢
#9
不是有call的吗
Test* pTest = new Test();
004132CE mov dword ptr [ebp-0E0h],1
004132D8 mov eax,dword ptr [ebp-0E0h]
004132DE push eax
004132DF call operator new (411203h)
004132E4 add esp,4
004132E7 mov dword ptr [ebp-0D4h],eax
004132ED cmp dword ptr [ebp-0D4h],0
004132F4 je main+6Ch (41331Ch)
004132F6 mov ecx,dword ptr [ebp-0E0h]
004132FC push ecx
004132FD push 0
004132FF mov edx,dword ptr [ebp-0D4h]
00413305 push edx
00413306 call @ILT+505(_memset) (4111FEh)
0041330B add esp,0Ch
0041330E mov eax,dword ptr [ebp-0D4h]
00413314 mov dword ptr [ebp-0E8h],eax
0041331A jmp main+76h (413326h)
0041331C mov dword ptr [ebp-0E8h],0
00413326 mov ecx,dword ptr [ebp-0E8h]
0041332C mov dword ptr [pTest],ecx
Test* pTest = new Test();
004132CE mov dword ptr [ebp-0E0h],1
004132D8 mov eax,dword ptr [ebp-0E0h]
004132DE push eax
004132DF call operator new (411203h)
004132E4 add esp,4
004132E7 mov dword ptr [ebp-0D4h],eax
004132ED cmp dword ptr [ebp-0D4h],0
004132F4 je main+6Ch (41331Ch)
004132F6 mov ecx,dword ptr [ebp-0E0h]
004132FC push ecx
004132FD push 0
004132FF mov edx,dword ptr [ebp-0D4h]
00413305 push edx
00413306 call @ILT+505(_memset) (4111FEh)
0041330B add esp,0Ch
0041330E mov eax,dword ptr [ebp-0D4h]
00413314 mov dword ptr [ebp-0E8h],eax
0041331A jmp main+76h (413326h)
0041331C mov dword ptr [ebp-0E8h],0
00413326 mov ecx,dword ptr [ebp-0E8h]
0041332C mov dword ptr [pTest],ecx
#10
插一句,第2题结果未定义,以前碰到这个问题的时候查过标准了,哈哈
#11
谁说这个call了。。。 。。。
#12
1 不CALL
2 哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
2 哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
#13
同意ls
#1
http://healerkx.spaces.live.com/
#2
骗人。blog上没有。
#3
5
#4
6
i is no longer a const type
c point to the address of a
i is no longer a const type
c point to the address of a
#5
第一题,如果没提供的话,不调用
如果提供的话就调用.
第二题,改变了,他复制了另一个内存区,改变了这个内存,但愿i不变
如果提供的话就调用.
第二题,改变了,他复制了另一个内存区,改变了这个内存,但愿i不变
#6
……来占个位子撒泡尿
其实甘草是来骗BLOG点击率的,大家不要给他骗了~
其实甘草是来骗BLOG点击率的,大家不要给他骗了~
#7
1. 明显不写不会,自己写了明显会!
不写call也没有
2. 常量折叠?
const int i = 5; //常量分配了内存(和变量很像),只是你想用i=6这样编译器会耍流氓
int* c = const_cast <int* >(&i); //你耍流氓强转
*c = 6; //可以,常量地址里面的内容被改了
cout<<i; //哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
不写call也没有
2. 常量折叠?
const int i = 5; //常量分配了内存(和变量很像),只是你想用i=6这样编译器会耍流氓
int* c = const_cast <int* >(&i); //你耍流氓强转
*c = 6; //可以,常量地址里面的内容被改了
cout<<i; //哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
#8
5
编译器才不像4楼这么傻呢
编译器才不像4楼这么傻呢
#9
不是有call的吗
Test* pTest = new Test();
004132CE mov dword ptr [ebp-0E0h],1
004132D8 mov eax,dword ptr [ebp-0E0h]
004132DE push eax
004132DF call operator new (411203h)
004132E4 add esp,4
004132E7 mov dword ptr [ebp-0D4h],eax
004132ED cmp dword ptr [ebp-0D4h],0
004132F4 je main+6Ch (41331Ch)
004132F6 mov ecx,dword ptr [ebp-0E0h]
004132FC push ecx
004132FD push 0
004132FF mov edx,dword ptr [ebp-0D4h]
00413305 push edx
00413306 call @ILT+505(_memset) (4111FEh)
0041330B add esp,0Ch
0041330E mov eax,dword ptr [ebp-0D4h]
00413314 mov dword ptr [ebp-0E8h],eax
0041331A jmp main+76h (413326h)
0041331C mov dword ptr [ebp-0E8h],0
00413326 mov ecx,dword ptr [ebp-0E8h]
0041332C mov dword ptr [pTest],ecx
Test* pTest = new Test();
004132CE mov dword ptr [ebp-0E0h],1
004132D8 mov eax,dword ptr [ebp-0E0h]
004132DE push eax
004132DF call operator new (411203h)
004132E4 add esp,4
004132E7 mov dword ptr [ebp-0D4h],eax
004132ED cmp dword ptr [ebp-0D4h],0
004132F4 je main+6Ch (41331Ch)
004132F6 mov ecx,dword ptr [ebp-0E0h]
004132FC push ecx
004132FD push 0
004132FF mov edx,dword ptr [ebp-0D4h]
00413305 push edx
00413306 call @ILT+505(_memset) (4111FEh)
0041330B add esp,0Ch
0041330E mov eax,dword ptr [ebp-0D4h]
00413314 mov dword ptr [ebp-0E8h],eax
0041331A jmp main+76h (413326h)
0041331C mov dword ptr [ebp-0E8h],0
00413326 mov ecx,dword ptr [ebp-0E8h]
0041332C mov dword ptr [pTest],ecx
#10
插一句,第2题结果未定义,以前碰到这个问题的时候查过标准了,哈哈
#11
谁说这个call了。。。 。。。
#12
1 不CALL
2 哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
2 哈哈,编译器说我早就学会优化了,既然说了是常量我就不用取地址里面的内容了,就是5了~
#13
同意ls