【发布时间】:2020-10-06 11:01:43
【问题描述】:
我对 c++ 还很陌生。我在一般编程方面有一些经验,特别是在 C 方面。 我有一个由其他人编写的 c++ 项目,我目前正在尝试理解它,它包含几个这种格式的变量声明:
uint64_t(*const col_timestamp)(const uint8_t* col_buf);
我无法理解这意味着什么。它甚至是一个变量声明吗?我会理解常量指针col_timestamp 指向uint64_t 类型变量和指针col_buf 指向const uint8_t 类型变量的两个单独声明,如下所示:
uint64_t * const col_timestamp;
const uint8_t * col_buf;
但我不认为这就是它的意思,因为那时我没有看到以这种方式编写它的理由。非常感谢您的帮助,因为我有点卡在这里。
如果这是一个重复的问题,我很抱歉,但我根本不知道要搜索什么,我想这对于熟悉 c++ 的人来说很容易回答。
提前致谢!
【问题讨论】:
-
欢迎来到 Stackoverflow。是的,您偶然发现了 C 函数指针语法的大杂烩,C++ 也支持该语法。幸运的是,您在 C++ 中不再需要它们,因为您有
std::function和模板参数(如std::copy_if使用)之类的东西。但是,既然您知道它实际上是什么,那么链接的副本应该可以回答您的大部分问题。 -
感谢您的快速回复!我明白了,所以这是一个将指针作为参数的函数指针的声明?这有点奇怪,因为同一个项目也使用了相当多的模板代码。你知道在函数模板上使用函数指针有什么好处吗?
-
在我看来没有任何好处,实际上与函数模板参数相比,没有任何性能优势,实际上AFAIK函数模板参数有利于运行时性能。这就是说对于编译时绑定的函数参数,如果你想在运行时绑定函数,
std::function是要走的路。
标签: c++ pointers variables function-pointers declaration