gpt4 book ai didi

c++ - "function"类型的优点是什么(不是 "pointer to function")

转载 作者:可可西里 更新时间:2023-11-01 16:41:34 27 4
gpt4 key购买 nike

阅读 C++ 标准,我看到有“函数”类型和“函数指针”类型:

typedef int func(int);     // function
typedef int (*pfunc)(int); // pointer to function
typedef func* pfunc; // same as above

我从未见过在示例之外使用的函数类型(或者我可能没有意识到它们的用法?)。一些例子:

func increase, decrease;            // declares two functions
int increase(int), decrease(int); // same as above

int increase(int x) {return x + 1;} // cannot use the typedef when defining functions
int decrease(int x) {return x - 1;} // cannot use the typedef when defining functions

struct mystruct
{
func add, subtract, multiply; // declares three member functions
int member;
};

int mystruct::add(int x) {return x + member;} // cannot use the typedef
int mystruct::subtract(int x) {return x - member;}

int main()
{
func k; // the syntax is correct but the variable k is useless!
mystruct myobject;
myobject.member = 4;

cout << increase(5) << ' ' << decrease(5) << '\n'; // outputs 6 and 4
cout << myobject.add(5) << ' ' << myobject.subtract(5) << '\n'; // 9 and 1
}

看到函数类型支持 C 中没有出现的语法(声明成员函数),我想它们不仅仅是 C++ 必须支持向后兼容的 C 包袱的一部分。

除了演示一些时髦的语法之外,函数类型还有什么用处吗?

最佳答案

一方面,您似乎在谈论一般的函数类型。另一方面,看来您的问题实际上是关于函数类型的typedef 名称 的可用性。

函数类型 本身是内置于 C 和 C++ 语言中的基本概念。它们一直被使用。没有它们你就活不下去。每次你声明一个函数,你就声明了一个函数类型的实体。每次使用指向函数的指针时,都会使用指向函数类型的指针。等等

至于为函数类型制作typedef 名称 的可能性……我看不出有多大用处。我认为,它是 C 包袱的一部分,为 C++ 做了一些扩展,只是因为它很容易做到。

正如您正确指出的,函数类型的 typedef 名称可用于声明成员函数(在 C++ 中,您还可以将 const 说明符包含在 typedef 中,如 typedef int MemberType() const ;),但是,例如,您不能将此功能用于作为模板参数传递的函数类型。

关于c++ - "function"类型的优点是什么(不是 "pointer to function"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497112/

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