假设我有这段代码:
#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
所以这引出了一个问题:这个成员指针的打印是否定义了行为?
答案 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
。两个指针都不是空指针,因此你得到你看到的输出。
如果你尝试打印“普通”指针(而不是指向成员的指针),你会得到一些与你最初预期相符的输出。