水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
1/1
|
转到
主题:今天掉进一个不算坑的坑
2楼
|
DoorWay
|
2020-10-21 04:56:27
|
展开
没看懂你的思路。
指针不总是4字节8字节吗? sizeof(int)
nullptr 是个结构体,隐式转换T* 的operator,用整型0转。
C*转B*,还是个int 0。接着reinterpret_cast,就是将连续的
32bit/64转为size_t,还是0?
【 在 fanci 的大作中提到: 】
: 得亏我及时一通搜索搞定。是这样的:
: 有三个类 A, B, C,其中 A和B都非空,而C同时继承A和B,即 struct C : A, B {...};
: 那么从 C的指针 static_cast 到 B的指针是会改变指针的值的。我想计算这个偏移量(有几字节),于是我搞了这么个:
: ...................
--
FROM 1.85.205.*
7楼
|
DoorWay
|
2020-10-21 12:50:19
|
展开
换个实例指针可以吗?为什么? 不是把B的地址(32或64bit)解释为size_t了吗?还是用户空间的地址,肯定是个很大的数字哦。
直觉是与sizeof(A),sizeof(B)有关系。
计算的话是用仨指针转整型作差吧?
【 在 fanci 的大作中提到: 】
: 不是。
: 我来公布答案:把 nullptr 变成非零就可以实现预期的目的,但是 nullptr(或者0)就总是得零。
: 解释也很简单,见
https://devblogs.microsoft.com/oldnewthing/20160224-00/?p=93081
--
FROM 124.114.151.*
8楼
|
DoorWay
|
2020-10-21 12:56:59
|
展开
CRTP是模板类在冒号后;这个是冒号前,fluent cpp称之为mix-in。
不知道是不是已经成为约定俗成的了,新的cpp idiom. 还是一家之言。
那文章的名字用了个单词YANG, mix-in: The YANG of the CRTP.
给我唬住了。查了下,原来是太极阴阳的阳…… CRTP是阴YAN :-D
【 在 fanci 的大作中提到: 】
: 可以,也可以用curiously recursive pattern实现mixin
--
FROM 124.114.151.*
10楼
|
DoorWay
|
2020-10-21 13:26:04
|
展开
啥原理
【 在 fanci 的大作中提到: 】
: 实例指针可以,0指针不行
--
FROM 124.114.151.*
12楼
|
DoorWay
|
2020-10-22 09:18:22
|
展开
你意思是传个不为0的值,比如1,返回值减去1,即是offset?
真猥琐的方法。陈Raymond的整篇文章都没有你这个暗含的作差难懂。
【 在 fanci 的大作中提到: 】
:
https://devblogs.microsoft.com/oldnewthing/20160224-00/?p=93081
--
FROM 124.114.151.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版