是否打印了指向int的成员指针

时间:2017-07-27 23:28:41

标签: c++ cout member-pointers

假设我有这段代码:

#include <iostream>

struct Mine
{
    int a;
    int b;
};


int main()
{

    int Mine::* memberPointerA = &Mine::a;
    int Mine::* memberPointerB = &Mine::b;



    std::cout << memberPointerA;
    std::cout << "\n";
    std::cout << memberPointerB;
}

当我使用Microsoft Visual C ++(2015)

运行时

我得到以下输出

1
1

我期望的输出更像是这样:

1
2

所以这引出了一个问题:这个成员指针的打印是否定义了行为?

2 个答案:

答案 0 :(得分:12)

已经定义了从指针到Dropdown的转换。由于成员变量指针不是import { DropdownModule, Dropdown, SelectItem } from 'primeng/primeng'; ... // modify dropdown component's template Reflect.getMetadata('annotations', Dropdown).forEach(annotation => { if (annotation.constructor.name === 'DecoratorFactory') { // add 'disabled' CSS class for disabled options annotation.template = annotation.template.replace("'ui-dropdown-item ui-corner-all':true, ", "'ui-dropdown-item ui-corner-all':true, disabled: option.disabled, "); // do not trigger click function on disabled options and set itemClick flag to prevent dropdown closing annotation.template = annotation.template.replace('(click)="onItemClick($event, option)"', '(click)="!option.disabled && onItemClick($event, option) || itemClick = true"'); } }); ,因此它们评估为true并打印为.ui-dropdown-item.ui-corner-all.disabled { opacity: 0.3; cursor: not-allowed; }

答案 1 :(得分:7)

手头的关键问题是指向成员的指针无法转换为void*,这是通常处理打印指针的重载。

因此,使用下一个最佳转换,即转换指针 - &gt; bool。两个指针都不是空指针,因此你得到你看到的输出。

如果你尝试打印“普通”指针(而不是指向成员的指针),你会得到一些与你最初预期相符的输出。