C++ 为什么这个可变变量的地址总是1?

C++ 为什么这个可变变量的地址总是1?,c++,iostream,implicit-conversion,cout,memory-address,C++,Iostream,Implicit Conversion,Cout,Memory Address,我想检查变量的地址 volatile int clock; cout << &clock; volatile int时钟; coutiostreams会将大多数指针投射到void*以进行显示-但是volatile指针不存在转换。这样C++就回到隐式转换到布尔O/COD>。如果要打印地址,请显式强制转换为void*: std::cout << (void*)&clock; std::cout有一个操作符这是因为操作符没有过载是的,有一个自动转换。它只是自

我想检查变量的地址

volatile int clock;
cout << &clock;
volatile int时钟;

coutiostreams会将大多数指针投射到
void*
以进行显示-但是
volatile
指针不存在转换。这样C++就回到隐式转换到<代码>布尔O/COD>。如果要打印地址,请显式强制转换为
void*

std::cout << (void*)&clock;

std::cout有一个
操作符这是因为
操作符没有过载是的,有一个自动转换。它只是自动转换为<代码>布尔O//> >,而不是<代码> Value>代码>,因为C++没有自动转换为代码> >空*>代码>指针(C确实,但是C++需要显式转换)@ BDONLAN:您已经得到了它。任何普通指针都可以隐式转换为
void*
,需要强制转换的是
void*
T*
。目前的答案是不正确的。<代码> t*<代码>转换为 Value*/Cuth>是隐含的。@ BDONLAN抱歉,但是C++确实有一个隐式的转换:<代码> T*<代码> > <代码> Value*/Cuff>。书面回答是错误的,或者至少是不完整的;C++不支持的是隐式地丢弃<代码>易失性>代码> @ JAMESSKANZE,大概是因为非代码>易失性< /COD>指针>代码> Value对象允许精确地存储<代码>易失性< /代码>的内存缓存类型1不一定总是表示数值-可以是逻辑的嗯。可能的复制品比我快了一秒钟,urg:(。补充:在bdonlan提出的解决方案中,c样式转换为
const\u cast
。就打印而言,这并不是一个真正的问题。
#include <iostream>

void foo(const void *a) {
    std::cout << "pointer\n";
}

void foo(bool a) {
    std::cout << "bool\n";
}

int main() {
    volatile int x;
    foo(&x);
    std::cout << &x << "\n";
    int y;
    foo(&y);
    std::cout << &y << "\n";
    void foo(volatile void*);
    foo(&x);
}

void foo(volatile void *a) {
    std::cout << "now it's a pointer\n";
}
bool
1
pointer
0x22cd28
now it's a pointer