作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
因此,我注意到 Xcode (v6.2) 似乎不像 Visual Studio 那样在纯虚函数中强制执行常量。几个问题:1)如果我在具有 const 参数的基类中有一个纯虚拟,并且在派生类中定义时它不是 const ...因为它符合 ANSI 并且:2) 有没有办法让 Xcode 像 Visual Studio 那样抛出错误?
在第一个 block 中我们有头文件,它有一个纯虚函数。
// 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 中定义时,常量性缺失。 Visual Studio 会善意提醒您注意这一事实,而 Xcode 不会。有没有办法让 Xcode 对此发出警告?
最佳答案
1) 符合标准。顶级 const
被忽略,所以这个
virtual double somePureVirtualFunk( const int someNumber ) = 0;
和这个完全一样
virtual double somePureVirtualFunk( int someNumber ) = 0;
在函数声明 中设置const
是没有意义的,因为它会被忽略。它可以用作函数的定义中使用的实现细节,这仅意味着不能在函数主体中修改局部参数。
double ClassB::somePureVirtualFunk(const int someNumber )
{
// someNumber cannot be modified here.
// But it is local, so nobody needs to know.
}
请注意,这仅适用于顶级 const
,如您的示例所示。
2) 考虑到函数签名相同,我不确定警告会有多大用处。一个很好的警告是告诉您在函数声明中有一个顶级 const 限定符,并且它没有任何作用。
关于c++ - 让 Xcode 强制跨虚拟函数执行数据类型和常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515187/
我是一名优秀的程序员,十分优秀!