Изначально мне нравится использовать что-то вроде этого:
(true?a:b).test()
вместо
(true?a.test():b.test())
чтобы сохранить время ввода, если функция имеет то же имя, изначально я думал, что она должна быть действительной, но я обнаружил:
#include <stdio.h>
class A{
public:
char test(){
return 'A';
}
};
class B{
public:
char test(){
return 'B';
}
};
int main(){
printf("%c\n",(false?A():B()).test());
return 0;
}
не может компилироваться, но если B
является подклассом A
:
#include <stdio.h>
class A{
public:
char test(){
return 'A';
}
};
class B : public A{
public:
char test(){
return 'B';
}
};
int main(){
printf("%c\n",(false?A():B()).test());
return 0;
}
он может скомпилировать, почему?