这里发生什么类型的演员表({{1}})?
B::get()
我在着名的API中看到过这种代码。做class A {
public:
A() : a(0) {}
int a;
};
class B : public A {
public:
A* get() {
return this; //is this C-style cast?
}
};
int main()
{
B b;
cout << b.get()->a << "\n";
system("pause");
return 0;
}
是否更好?
答案 0 :(得分:10)
这是标准的派生到基指针转换。规则是如果D
是const
,则指向具有volatile
/ B
个B
条件的D
的指针可以转换为指向static_cast
的指针,具有相同的限定符基类this.controllerFor('application')
。
标准转换是具有内置含义的隐式转换,是与moduleFor('route:application', 'Unit | Route | application', {
needs: ['service:session', 'controller:application']
});
test('delete record validation returns false if order item delete and update order item widget open', function(assert) {
assert.expect(1);
let route = this.subject();
let controller = route.controllerFor('application');
controller.set('rightSidebarWidgets', [{
name: 'widgets/add-update-order-item'
}]);
assert.notOk(route.deleteRecordValidation('orderItem'));
});
或C风格转换等内容分开的概念。
通常情况下,最好尽可能依赖隐式转换。显式转换会增加更多代码噪音,并可能隐藏一些维护错误。
答案 1 :(得分:3)
它是对祖先的隐式转换。隐式转换通常是安全的,他们不能做static_cast
无法做到的事情。它们实际上更受限制:您可以使用static_cast
进行未经检查的向下转发,但不能使用隐式转换。