- 1
- 2
typedef const AbstractParameter ConstAbstractParameter;
class Parameter: public ConstAbstractParameter{
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+23
typedef const AbstractParameter ConstAbstractParameter;
class Parameter: public ConstAbstractParameter{
GCC это не компилирует, но в 2008 ms vs компилируется без предупреждений. Я это как увидел, так сразу переписал на
class Parameter: public AbstractParameter{
LispGovno 20.11.2012 00:29 # 0
Psionic 20.11.2012 00:56 # +1
LispGovno 20.11.2012 01:00 # 0
И каковы результаты анализа?
Казнить нельзя помиловать.
Elvenfighter 20.11.2012 01:03 # +2
LispGovno 20.11.2012 01:06 # 0
Elvenfighter 20.11.2012 01:08 # +1
b.baz() вызывается без вопросов.
LispGovno 20.11.2012 01:13 # +1
LispGovno 20.11.2012 01:21 # +1
LispGovno 20.11.2012 01:10 # +1
Elvenfighter 20.11.2012 01:14 # +1
LispGovno 20.11.2012 01:18 # +1
Elvenfighter 20.11.2012 01:21 # +1
Fail.
Ok.
LispGovno 20.11.2012 01:23 # 0
> class Parameter: public AbstractParameter {
Fail.
Elvenfighter 20.11.2012 01:27 # +1
LispGovno 20.11.2012 01:28 # 0
Elvenfighter 20.11.2012 01:35 # +2
Elvenfighter 20.11.2012 01:36 # +1
Компилировался.
LispGovno 20.11.2012 01:46 # +2
Вот лошадка и п рыгнула.
И так новое свойства такого класса с наследованием от константного класса:
При вызове метода через предка - можно вызывать только константные методы, зато через потомка это ограничение уже не влияет.
g++ подтверждает?
Elvenfighter 20.11.2012 02:08 # +1
Elvenfighter 20.11.2012 02:12 # +1
guest 20.11.2012 11:03 # −1
Fai 20.11.2012 01:10 # +1
LispGovno 20.11.2012 01:16 # 0
bormand 20.11.2012 07:06 # +5
В стандарте с++98 написано: A typedef name (7.1.3) that names a class is a class-name. Про cv ничего не написано.
А вот в с++11 есть такой пункт: "If a typedef-name that names a cv-qualified class type is used where a class-name is required, the cv-qualifiers are ignored."