gpt4 book ai didi

c++ - 定义具有不同签名的函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:36 26 4
gpt4 key购买 nike

今天我发现可以在头文件中用一个签名声明一个函数,并在源文件中用不同(相似)的签名实现它。例如,像这样:

// THE HEADER  example.hpp

#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP

int foo( const int v );

#endif

// THE SOURCE FILE example.cpp

#include "example.hpp"

int foo( int v ) // missing const
{
return ++v;
}

这是允许的吗?或者这是编译器的扩展(我使用的是 g++ 4.3.0)?

编辑我正在使用迂腐和最大可能的警告级别进行编译,但我仍然没有收到警告或错误。

最佳答案

为了确定函数签名,任何顶级 const 限定符都将被忽略。这是因为它不影响函数调用者。函数参数在任何情况下都是按值传递的,因此函数不会影响传入的参数。

顶层 const 确实会影响函数体。它确定参数是否可以在函数体中更改。不过,它与声明的功能相同。

所以是的,这是合法的,声明和定义指的是同一个函数而不是重载。

标准引用:8.3.5 [dcl.fct]/3:“[...]函数的类型使用以下规则确定。[...]任何cv-qualifier 修改参数类型被删除。[...] 这样的 cv-qualifiers 只影响函数体内参数的定义;它们不影响函数类型。[... ]”

关于c++ - 定义具有不同签名的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4212932/

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