【问题标题】:std::dec still outputting memory address to hex?std::dec 仍然将内存地址输出为十六进制?
【发布时间】:2020-07-18 20:35:57
【问题描述】:

我有:

std::cout << "Start = " << std::dec << (&myObject) << std::endl;

以十进制输出地址。但是,地址仍然是十六进制的??

(我为十个成员中的每一个输出其中一个,所以我不想将每个成员分配给一个变量,然后分别std::dec该变量)

【问题讨论】:

  • std::cout
  • @hanshenrik:当uintptr_t 正是为此目的而创建时,为什么还要对指针类型大小做出假设???
  • 我想不出任何原因 :D 我只是在写 intptr_t 时不知道它;谢谢

标签: c++


【解决方案1】:

hexdec 操纵器用于整数,而不是指针。指针始终printf%p 格式化程序在您的系统上使用的格式(通常是十六进制表示法)呈现。

这有助于强调指针和数字是不同的这一事实。您可能会认为它是数字语义和数字表示在某种程度上耦合的罕见情况之一。

最好的办法是在流式传输之前将指针转换为uintptr_t

std::cout << "Start = " << std::dec << uintptr_t(&myObject) << std::endl;

...但请考虑您是否真的需要这样做。

【讨论】:

  • 为什么“你是否真的需要这样做”?
  • @user997112:我在其余答案中解释了这一点。是什么让您认为您需要以非常规的方式表示指针?这通常不是一个好主意。
  • @LightnessRacesinOrbit std::dec 在这种情况下是多余的
  • @vsoftco:从之前的操作中你不知道流处于什么状态。
猜你喜欢
  • 1970-01-01
  • 2020-08-08
  • 2016-08-29
  • 2019-07-04
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多