gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:57:30 26 4
gpt4 key购买 nike

因此,我注意到 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com