C++ 我需要在派生类上指定属性吗?

C++ 我需要在派生类上指定属性吗?,c++,C++,我有这个接口。如果我派生,是否需要再次指定格式属性?而且,如果一个类Deriv实现了这个接口,我可以使用Deriv::LT_DEBUG class Logger { public: enum LogType { LT_DEBUG = 0, LT_WARNING, LT_ERROR, LT_STAT, LT_TEXT

我有这个接口。如果我派生,是否需要再次指定
格式属性
?而且,如果一个类
Deriv
实现了这个接口,我可以使用
Deriv::LT_DEBUG

class Logger
{
    public:
        enum LogType
        {   
            LT_DEBUG = 0,
            LT_WARNING,
            LT_ERROR,
            LT_STAT,
            LT_TEXT
        };  

        __attribute__((format(printf, 6, 7)))
        virtual const char* EHLog(LogType,
                bool,
                const char*,
                int,
                const char*, 
                ...) = 0;

        virtual ~Logger(){}
};

我找不到关于它的任何文档,但我猜
\uuuuu属性\uuuuu
注释不是由派生类隐式继承的。
这意味着,如果您通过
Deriv
实例、引用或指针调用
EHLog
,则仅当
Deriv::EHLog
还指定了
\uuu属性((格式))
注释时,才会执行格式检查

我猜测的原因是,通过这种方式,编译器不必更改其名称查找机制,以应对被重写的基类函数上的
\uuuu属性\uuu
注释的可能性



至于第二个问题:是的,您可以使用派生类限定从基类访问名称
Deriv::LT_DEBUG
应该可以工作并解析为与
Logger::LT_DEBUG

相同的名称。我从未见过这样的事情,它用于验证函数的参数是否正确。如果你使用可变参数列表。:@ereOn@Kiril-Kirov:谢谢你的链接。真的很有趣。一个测试表明,如果您在没有属性的情况下专门调用派生类的方法,则不会检查格式。