【发布时间】:2018-08-24 05:22:20
【问题描述】:
我在this 中读到,在 C 中它必须是安全的(基于答案)
我想知道在 C++ 中做同样的事情是否安全(基于this 中的答案,应该是)。我附上了我的代码,该代码可以编译以准确显示我想要询问的内容。
我有一个以函数指针作为参数的函数。参数是一个带有非常量参数的函数指针,但我为该函数提供了一个指向带有 const 参数的函数的指针。
GCC 没有抱怨它,我认为它应该是安全的,但我想确保我没有留下任何细节。
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 */
}
【问题讨论】:
-
在 C++ 中也是一样,最上面的 const volatile 限定符只影响函数体内参数的可变性。
-
我意识到你上面说的是正确的,但如果参数是“const int&”和“int&”,那么编译器会抱怨。如果我将引用视为指针,我可以理解为什么它不起作用,因为 const 指的是指针指向的内容,而不是指针本身。您能否验证我的理解,以便我可以将其添加到我的答案中,谢谢。
-
int& 中最重要的东西是引用,它本质上是不可变的,因此不能是易变的。