我已在this中读到,在C中它必须是安全的(基于答案)
我想知道在C ++中做同样的事情是否安全(根据this中的答案,它应该是)。我附上了我编写的代码,以准确显示我想要问的内容。
我有一个函数指针作为参数。参数是一个带有非参数参数的函数指针,但我为该函数提供了一个带有const参数的函数的指针。
海湾合作委员会没有抱怨它,我认为它应该是安全的,但我想确保我不留下任何细节。typedef uint16_t (myFunction)(uint16_t);
uint16_t increment(const uint16_t input);
uint16_t callFunction(myFunction* function, const uint16_t input);
uint16_t increment(const uint16_t input)
{
return input + 1;
}
uint16_t callFunction(myFunction* function, const uint16_t input)
{
return (*function)(input);
}
void setup()
{
callFunction(increment, 2);
/* add setup code here */
}
void loop()
{
/* add main program code here */
}
答案 0 :(得分:0)
阅读ÖöTiib的评论后。我决定回答一些细节,以便我可以回答这个问题而不是浪费其他用户的时间。
基于工作草案,编程语言C ++标准(N4727),第16.1节“可重载声明”
3.4仅存在或不存在const和/或volatile的参数声明是等效的。也就是说,const和 当时,将忽略每个参数类型的volatile类型说明符 确定正在声明,定义或调用哪个函数。
typedef const int cInt;
int f (int);
int f (const int); // redeclaration of f(int)
int f (int) { /* ... */ } // definition of f(int)
int f (cInt) { /* ... */ } // error: redefinition of f(int)
只有最外层的const和volatile类型说明符 以这种方式忽略参数类型规范;常量 和volatile类型说明符隐藏在参数类型中 规范是重要的,可用于区分 重载函数声明。特别是对于任何类型的T, “指向T的指针”,“指向const T的指针”和“指向易失性T的指针” 被认为是不同的参数类型,如“对T的引用”, “引用const T”和“引用volatile T”。
根据上述说明,可以得出结论,一定不能有任何问题。