![]() |
1
27
当传入易失性指针时,第二个重载无法应用,因为如果没有显式转换,则无法将易失性指针转换为非易失性指针。但是,任何指针都可以转换为bool,因此选择了第一个重载,您看到的结果是1或0。 因此,真正的原因不是代表标准委员会的一个有意的决定,而是标准没有指定一个采用易失性指针的重载。 |
![]() |
2
5
我认为原因是不稳定的指针不能隐式转换为void*。这在本标准附录C中,其基本原理是类型安全。
因此,不需要转换为void*(将以十六进制打印),而是将“默认”转换为bool。 |
![]() |
3
2
不是答案 这只是问题的措辞和答案的问题。问题是由于无法转换 指向易失性的指针 对象转换为空指针,而不是 易变指针 . 区别,这是相当重要的,是什么记忆元件是一个挥发性的。在问题中,指针不是易失的(它可以被缓存,并且在更改时不必刷新到内存中),而是指向的内存:
之所以重要,是因为对于内存的易失性指针,指针本身是经过特殊处理的。
在上面的代码中,标记为1和2的操作使它一直保持到内存中。必须将[1]中的赋值转储到内存中。即使价值
|
![]() |
4
1
我认为问题不是指向易失性类型的指针的显式重载,而是缺少指向易失性类型的指针的重载。编译器无法从指针中隐式删除volatile限定符,因此它检查可用的重载,选择运算符<<的bool版本,并将指针转换为volatile到bool。 |
![]() |
Fredericson · 如何避免在Java中使用volatile 6 年前 |
![]() |
razorozx · C++如何获取父数据类型的sizeof? 7 年前 |
|
JavaKaKida · 单核cpu java中的易失性 7 年前 |
![]() |
gstackoverflow · 顺序一致性挥发性解释 7 年前 |
![]() |
AlastairG · volatile关键字如何影响静态常量数组? 7 年前 |