C++ 让Xcode跨虚拟函数强制执行数据类型和常量
因此,我注意到Xcode(v6.2)似乎不像VisualStudio那样在纯虚拟函数中强制执行常量。有几个问题: 1) 如果我在基类中有一个纯虚函数,它有一个const参数,但在derrive类中定义时它不是const。。。符合ANSI标准,并且: 2) 有没有办法让Xcode像VisualStudio那样抛出错误 在第一个块中,我们有头文件,它有一个纯虚拟函数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)
// 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限定符,并且它没有效果