English 中文(简体)
广播
原标题:Typedef reinterpret_cast

I am having some trouble figuring out the syntax for typedef reinterpret_cast. Can anyone help?

www.un.org/Depts/DGACM/index_spanish.htm

我正在努力做些什么。 我总是犹豫不决,因为人们似乎陷入了其他一切事情,但问题实际上与我最后的职位一样,导致一刀切。

我正试图找到一种方式,把短片地址分配给点人。 我将此用作安全渔获物等。 我因此认为,这种类型的投放将有助于实现这一目标。 请不要建议我使用联合国利比里亚特派团。

增 编

问题回答

我认为,我最后理解你想要的东西,但我仍然不肯定你为什么想要,我怀疑你真的不需要。 如果你告诉我们你的最终目标是什么,我们或许能够告诉你你你真的需要。 尽管如此:

你似乎知道:

Foo* p = 0;

定义为:<代码>p,为无效点,实际上可能或不可能以记名中的笔记为代表。 你们似乎想方设法确保点人所占领的记忆完全为零点,而不是任何比方位的表示。

在这方面,你可以采取两种方式。 最直接和最正确的做法是:

Foo* p;
memset(&p, 0, sizeof(p));

另一种似乎是你对<代码>reinterpret_cast的思考,即:

Foo* p;
int i = 0;
p = reinterpret_cast<Foo*>(i);

直接将<代码>p分配给零的原因并不在于仅将literal0s 解释为指定给点人的无效点。 <代码>i载有数值零,但并非字面零。 以上是错误的,但当点人和愤怒者人数相同时,更好的方法可能是:

Foo* p;
char c[sizeof(p)] = {0};
p = reinterpret_cast<Foo*>(c);

但是,这还不是校正<>,因为使用<代码>reinterpret_cast<>代码/代码>的未明确行为。 当你重新思考你所投的变量的真正类型时。 上文Foo*,因此,这是不明确的行为。 因此,你应使用<代码>memset实现这一点。

您似乎想使用<条码>tdef,这样你就能够拥有一种在设定时自动分配价值0的点值。 不幸的是,这是不可能的。 缩略语 只能说明某种类型,而不是初步价值。 除了设立你自己的智能标识类别来做这项工作外,你可以做的最好工作是,在方便的条件下,例如,在方便的条件下,打上<条码>。

template <typename T> T* zeroPointer() {
   T* p;
   memset(&p, 0, sizeof(p));
   return p;
}

Foo* p = zeroPointer<Foo>();

现在,即便是考虑到所有这一切,这仍然不能给你在所有情况下都想要的东西。 正如全球机制在其评论中指出的,它没有保证在所有平台上以数字表示点数,因此,<代码>p<>/code>的价值在之后可能不是数字零,可能与address<>em>。 0 在系统中,即便是零点。 特定系统甚至不得 行事,如“地址0”。 例如,就特定系统而言,一名协调人可以代表一个包含部分地址和抵消的构件。

最后,我们知道,为了这一价值,你将不得不承受额外的疼痛。 例如:

Foo* p = zeroPointer<Foo>();

if (p == 0) {
  // Not reached if NULL is not all-zero bits, since the literal 0 in the
  // comparison is interpreted as a null pointer constant
}

您基本上必须逐个检查。 在不援引未经界定的行为的情况下这样做的唯一办法就是:

template <typename T> bool isZero(T& p) 
{
   char c[sizeof(p)];
   memcpy(&c, &p, sizeof(p));
   for (int i = 0; i < sizeof(p); ++i) {
     if (c[i] != 0) return false;
   }
   return true;
}

Foo* p = zeroPointer<Foo>();

if (isZero(p)) {
  // Always reached
}

这完全是很麻烦的,因为你对这里的措辞重新工作。 这种措辞试图通过提供一种确定无效点的可行方法而有所助益,但是,你想回避这一点,并出于某种原因自行确定所有零轨道。 因此,我相信,无论你最终想要做什么,都可以以某种其他方式做,而这种方式并不涉及打击你重新拟定方案的措辞。

你们喜欢吗?

sometype *foobar = 0;

在C/C++中,没有价值的指定点是你必须人工做的事。 如果你重新寻找办法使其自动失效,则看清象汽车或智能班等点包装类别。

页: 1 www.un.org/Depts/DGACM/index_french.htm

template<typename T> T* improved_null()
{
    return reinterpret_cast<T*>(0);
}

int* foo = improved_null<int>();

在这种情况下,你实际上不需要<代码>reinterpret_cast<>/code>(如果有必要,其收益价值被胁迫为正确的类型):

template<typename T> T* improved_null() { return 0 }

当然,如果您希望改进<代码>NUL,可考虑<代码>nullptr。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?