相关疑难解决方法(0)

将const限定符应用于模板参数时的不同编译器行为

考虑以下示例(godbolt):

#include <iostream>

template <typename T>
const T *as_const(T *p) { return p; }

void f() {}

template <typename T>
void g(T *) { std::cout << "A"; }

template <typename T>
void g(const T *) { std::cout << "B"; }

int main() {
  g(as_const(&f));
}
Run Code Online (Sandbox Code Playgroud)

GCC和Clang都可以编译它,但生成的可执行文件产生不同的输出:用GCC打印编译的版本A和用Clang打印编译的版本B.

你能解释一下这个区别吗?

更新:正如@VTT指出的那样,即使as_const被删除也会观察到相同的差异.

c++ gcc templates const clang

27
推荐指数
1
解决办法
566
查看次数

如何在C中声明一个常量函数指针数组?

我需要声明一个指向函数的指针数组,如下所示:

extern void function1(void);
extern void function2(void);
...

void (*MESSAGE_HANDLERS[])(void) = {
   function1,
   function2,
   ...
};
Run Code Online (Sandbox Code Playgroud)

但是,我希望将数组声明为常量 - 数组中的数据和指向数据的指针.不幸的是,我不记得在哪里放置const关键字.

我假设在这种情况下,实际指针MESSAGE_HANDLERS已经是常量,因为它被声明为数组.另一方面,如果声明如图所示,那么数组中的函数指针是否可以在运行时更改?

c arrays pointers const function-pointers

22
推荐指数
3
解决办法
3万
查看次数

标签 统计

const ×2

arrays ×1

c ×1

c++ ×1

clang ×1

function-pointers ×1

gcc ×1

pointers ×1

templates ×1