让Xcode在虚函数中强制数据类型和常量

Getting Xcode to enforce data types and constness across virtual functions

本文关键字:数据类型 常量 Xcode 函数      更新时间:2023-10-16

所以,我注意到Xcode (v6.2)似乎不像Visual Studio那样在纯虚函数中强制执行constness。几个问题:1)如果我在基类中有一个纯虚类,它有一个const参数,并且在派生类中定义时它不是const…符合ANSI标准,并且:2)有没有办法让Xcode抛出一个错误像Visual Studio做的?

在第一个块中我们有头文件,它有一个纯虚函数。

// Some header file (assume include guards and all that fun stuff)
namespace Testing123
{
    class ClassA
    {
    public:
        // ************ NOTICE THAT THE ARGUMENT IS CONST!!! ***************   
        virtual double  somePureVirtualFunk( const double someNumber ) = 0;       
    protected:
        inline double getSomeFunkyNumber(){ return m_something; };
    private:
        double m_something;
    }
}

现在,在第二个文件中,我们有一个派生类的头文件,带有一个内联函数,该函数定义了ClassA的纯虚函数…

// Some header file (assume include guards and all that fun stuff)
#include "ClassA.h"
namespace Testing123
{
    class ClassB : public ClassA
    {
    public:
        // ************ NOTICE THAT THE ARGUMENT IS **NOT** CONST!!! *************   
        inline virtual double  somePureVirtualFunk( double someNumber )
        { return this->getSomeFunkyNumber(); }; 
    }
}

所以我认为这证明了我所看到的,在ClassA中somePureVirtualFunk被声明为具有const参数,当它在ClassB中定义时,const缺失。Visual Studio善意地提醒你这个事实,Xcode没有。有没有办法让Xcode警告我这个?

1)符合标准。忽略顶级const s,因此

virtual double  somePureVirtualFunk( const int someNumber ) = 0; 

完全相同
virtual double  somePureVirtualFunk( int someNumber ) = 0; 
在函数a 声明中设置const是没有意义的,因为它被忽略了。它可以用作函数定义中使用的实现细节,在这里它只意味着局部形参不能在函数体中修改。
double ClassB::somePureVirtualFunk(const int someNumber )
{
  // someNumber cannot be modified here.
  // But it is local, so nobody needs to know.
}

注意,这只适用于顶级const,如在您的示例中。

2)我不确定这个警告有多有用,因为函数签名是相同的。一个好的警告应该是告诉您在函数声明中有一个顶级const限定符,并且它没有作用。