C++ 让Xcode跨虚拟函数强制执行数据类型和常量

C++ 让Xcode跨虚拟函数强制执行数据类型和常量,c++,xcode,C++,Xcode,因此,我注意到Xcode(v6.2)似乎不像VisualStudio那样在纯虚拟函数中强制执行常量。有几个问题: 1) 如果我在基类中有一个纯虚函数,它有一个const参数,但在derrive类中定义时它不是const。。。符合ANSI标准,并且: 2) 有没有办法让Xcode像VisualStudio那样抛出错误 在第一个块中,我们有头文件,它有一个纯虚拟函数 // Some header file (assume include guards and all that fun stuff)

因此,我注意到Xcode(v6.2)似乎不像VisualStudio那样在纯虚拟函数中强制执行常量。有几个问题: 1) 如果我在基类中有一个纯虚函数,它有一个const参数,但在derrive类中定义时它不是const。。。符合ANSI标准,并且: 2) 有没有办法让Xcode像VisualStudio那样抛出错误

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

// 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;
    }
}
double ClassB::somePureVirtualFunk(const int someNumber )
{
  // someNumber cannot be modified here.
  // But it is local, so nobody needs to know.
}
现在在第二个文件中,我们有了一个派生类的头,该派生类带有一个内联函数,该函数定义了我们的纯虚拟自类a

// 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(); }; 
    }
}
所以我认为这证明了我所看到的,在类a中,一些pureVirtualFunk被声明为有一个常量参数,当它在类B中被定义时,常量就丢失了。VisualStudio善意地提醒您这一事实,Xcode没有。有没有办法让Xcode警告我这一点?

1)它符合标准。顶层
const
s被忽略,因此

virtual double  somePureVirtualFunk( const int someNumber ) = 0; 
和这个一模一样

virtual double  somePureVirtualFunk( int someNumber ) = 0; 
在函数声明中设置
常量是没有意义的,因为它会被忽略。它可以用作函数定义中使用的实现细节,这意味着不能在函数体中修改局部参数

// 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;
    }
}
double ClassB::somePureVirtualFunk(const int someNumber )
{
  // someNumber cannot be modified here.
  // But it is local, so nobody needs to know.
}
请注意,这仅适用于顶级
常量
,如您的示例所示

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