avatar
this和&*this的区别# Programming - 葵花宝典
z*a
1
总是在实验室用笔记本,周围又有空调噪声,所以想买个封闭式的耳机可以被动降噪,
求达人推荐一个
一百刀级别的耳机,最好也能用clip直推,谢谢!
avatar
S*M
2
诚心请教(帮朋友一问,因为我什么都不懂),这里的外国人是指不是居住在美国的人也
没有美国的身份(比如绿卡)。如果能,那么报税怎么报呢?海外(比如在中国)的商业收
入也要报美国的税么?
多谢多谢!
avatar
u*d
3
我在买买提活跃网友评选中目前排第11位,很有希望进入前10, 今天(19日)是最后一天投票, 请大家支持,投我一票.
无论当选与否,将捐伪币给版面. 本人实在无力贿选, 只能捐包子给版面了, 谢谢! 下面是投票连接:
http://www.mitbbs.com/mitbbs_bbsvote.php?board=MyActivity&num=3
请选:
87 upload
91 wawaya
不好意思,打扰大家接龙了,我还在第11位,急火攻心啊!
avatar
C*y
4
三个类
class A{};
class B: public A {};
class C: public B {};
使用指向B的this指针进行cast
发现
(A*)this和(A*)(&*this)的值不同
(A*)this 和 this的值相同
我用的是vs 2008,请问这两种cast有啥区别?
谢谢
avatar
k*n
5
抬头看几天前的帖子

【在 z*a 的大作中提到】
: 总是在实验室用笔记本,周围又有空调噪声,所以想买个封闭式的耳机可以被动降噪,
: 求达人推荐一个
: 一百刀级别的耳机,最好也能用clip直推,谢谢!

avatar
m*m
6
可以啊,现在都可以直接投资移民呢,注册公司为什么不可以
avatar
l*d
7
已投,加油!!
avatar
x*u
8
这种C风格的指针转换实际上是危险的,应该使用static_cast,dynamic_cast这种转换。
C++这东西因为有虚方法表的存在,指针转换有可能得到不同的结果。不过你写的空
class应该是等同于struct,没关系的。

【在 C***y 的大作中提到】
: 三个类
: class A{};
: class B: public A {};
: class C: public B {};
: 使用指向B的this指针进行cast
: 发现
: (A*)this和(A*)(&*this)的值不同
: (A*)this 和 this的值相同
: 我用的是vs 2008,请问这两种cast有啥区别?
: 谢谢

avatar
S*M
9
谢谢啊!那请问需要什么样的手续呢?或者具体我去什么部门可以咨询到这些信息呢?

【在 m**m 的大作中提到】
: 可以啊,现在都可以直接投资移民呢,注册公司为什么不可以
avatar
C*y
10
谢谢!
空的只是为了示例一下,实际上都是很复杂的类
这么转换是因为vs 的watch window里面是这么表示的
我试着用static_cast之类的,结果不支持。。。

换。

【在 x****u 的大作中提到】
: 这种C风格的指针转换实际上是危险的,应该使用static_cast,dynamic_cast这种转换。
: C++这东西因为有虚方法表的存在,指针转换有可能得到不同的结果。不过你写的空
: class应该是等同于struct,没关系的。

avatar
j*s
11
google uspto. you are lazy man.
avatar
x*u
12
VC支持static_casta阿

【在 C***y 的大作中提到】
: 谢谢!
: 空的只是为了示例一下,实际上都是很复杂的类
: 这么转换是因为vs 的watch window里面是这么表示的
: 我试着用static_cast之类的,结果不支持。。。
:
: 换。

avatar
S*M
13
多谢!说的对,我是挺懒的

【在 j**s 的大作中提到】
: google uspto. you are lazy man.
avatar
C*y
14
试了,不支持。。。
我现在怀疑我最开始拿到的指针可能就是invalid的(是用CONTAINING_RECORD通过链表
拿到的)
我再查查,稍后update

【在 x****u 的大作中提到】
: VC支持static_casta阿
avatar
x*u
15
static_cast的意思就是和指针类型有关,和内容无关。

【在 C***y 的大作中提到】
: 试了,不支持。。。
: 我现在怀疑我最开始拿到的指针可能就是invalid的(是用CONTAINING_RECORD通过链表
: 拿到的)
: 我再查查,稍后update

avatar
A*u
16
你的A没有虚函数
所以dynamic cast不转

【在 C***y 的大作中提到】
: 试了,不支持。。。
: 我现在怀疑我最开始拿到的指针可能就是invalid的(是用CONTAINING_RECORD通过链表
: 拿到的)
: 我再查查,稍后update

avatar
C*y
17
都有虚函数。。。

【在 A**u 的大作中提到】
: 你的A没有虚函数
: 所以dynamic cast不转

avatar
X*r
18
在这里(从派生类指针类型转换到基类指针类型)C风格cast完全等价于static_cast,
见[expr.cast]

换。

【在 x****u 的大作中提到】
: 这种C风格的指针转换实际上是危险的,应该使用static_cast,dynamic_cast这种转换。
: C++这东西因为有虚方法表的存在,指针转换有可能得到不同的结果。不过你写的空
: class应该是等同于struct,没关系的。

avatar
r*t
19
&*this 都 dereference 了自然不对,其他情况随便怎么 cast 应该值一样。当然应该
改用 c++ style cast 最好。

【在 C***y 的大作中提到】
: 三个类
: class A{};
: class B: public A {};
: class C: public B {};
: 使用指向B的this指针进行cast
: 发现
: (A*)this和(A*)(&*this)的值不同
: (A*)this 和 this的值相同
: 我用的是vs 2008,请问这两种cast有啥区别?
: 谢谢

avatar
C*y
20
为什么先dereference然后再reference就不对了?
能否稍微详细解释一下
谢谢!

【在 r****t 的大作中提到】
: &*this 都 dereference 了自然不对,其他情况随便怎么 cast 应该值一样。当然应该
: 改用 c++ style cast 最好。

avatar
x*u
21
等于也不要用啊。

【在 X****r 的大作中提到】
: 在这里(从派生类指针类型转换到基类指针类型)C风格cast完全等价于static_cast,
: 见[expr.cast]
:
: 换。

avatar
w*g
22
求科普

【在 r****t 的大作中提到】
: &*this 都 dereference 了自然不对,其他情况随便怎么 cast 应该值一样。当然应该
: 改用 c++ style cast 最好。

avatar
r*t
23
bummer,应该是一样的,不知道为啥你那会不一样。应该是具体 class 内部
有些东西造成的。A,B 有没有定义 operator*?

【在 C***y 的大作中提到】
: 为什么先dereference然后再reference就不对了?
: 能否稍微详细解释一下
: 谢谢!

avatar
C*y
24


【在 r****t 的大作中提到】
: bummer,应该是一样的,不知道为啥你那会不一样。应该是具体 class 内部
: 有些东西造成的。A,B 有没有定义 operator*?

avatar
C*y
25
没有定义
可能是visual studio的bug。。。

【在 r****t 的大作中提到】
: bummer,应该是一样的,不知道为啥你那会不一样。应该是具体 class 内部
: 有些东西造成的。A,B 有没有定义 operator*?

avatar
x*u
26
有个虚函数表问题吧。

【在 r****t 的大作中提到】
: bummer,应该是一样的,不知道为啥你那会不一样。应该是具体 class 内部
: 有些东西造成的。A,B 有没有定义 operator*?

avatar
w*r
27
建议反汇编看看,怀疑(A*)(&*this),中*this先生成临时对象调用拷贝构造函数,然后
把临时对象地址转换成基类指针,纯猜测,如果系统自动优化的话,应该是等价于(A*)
this的.
avatar
p*t
28
re

换。

【在 x****u 的大作中提到】
: 这种C风格的指针转换实际上是危险的,应该使用static_cast,dynamic_cast这种转换。
: C++这东西因为有虚方法表的存在,指针转换有可能得到不同的结果。不过你写的空
: class应该是等同于struct,没关系的。

avatar
r*t
29
这个 B 里面 (A*)this 和 (A*)(&*this) 其实有时候就是不等的,dereference 以后
依赖于 pointer type, 地址可能是不同的。这个在 C 里面总是相同的。在 c++ 里面
不能假定总是相同的。
前面(后面?)wifeholder 的猜测是对的。
今天又学了一点,太 tricky 了,到啥时候才能宣称会 c++ 阿。。

【在 C***y 的大作中提到】
: 没有定义
: 可能是visual studio的bug。。。

avatar
p*t
30
class A里面有virtual的函数吗?如果有,可能是想用dynamic type.

【在 C***y 的大作中提到】
: 三个类
: class A{};
: class B: public A {};
: class C: public B {};
: 使用指向B的this指针进行cast
: 发现
: (A*)this和(A*)(&*this)的值不同
: (A*)this 和 this的值相同
: 我用的是vs 2008,请问这两种cast有啥区别?
: 谢谢

avatar
w*r
31
c++的底层还是c和汇编,找不着原因就看汇编代码,那是精确的

【在 r****t 的大作中提到】
: 这个 B 里面 (A*)this 和 (A*)(&*this) 其实有时候就是不等的,dereference 以后
: 依赖于 pointer type, 地址可能是不同的。这个在 C 里面总是相同的。在 c++ 里面
: 不能假定总是相同的。
: 前面(后面?)wifeholder 的猜测是对的。
: 今天又学了一点,太 tricky 了,到啥时候才能宣称会 c++ 阿。。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。