C/C++ 如何在一次函数调用中交出 const 函数指针或简单指针
C/C++ How to hand over a const function pointer or a simple pointer in one function call
我有一个函数(func1),它获取一个常量指针作为参数。 此指针的值用于第二个函数 (func2)。 根据布尔值,我想在是否将其交给 func2 之前修改此值。如果我必须修改它,我会分配新的内存来存储它的修改版本。因为实际上 const int 指针是一个大数组,我不想复制它。 我试图以这种方式解决它:
void func1(const int* value, bool change)
{
int* valueToUse;
if(change)
{
int changedValue = (*value)++;
valueToUse = &changedValue;
}
else
{
valueToUse = value; // <= here the Error occurs
}
func2(valueToUse);
}
void func2(const int* foo)
{
// ...
}
但是如果我这样做,我会收到一个错误,因为我将一个 const 指针分配给一个简单的指针:
错误:从"const int* 到 int*"的转换无效
有什么简单的方法可以解决这个问题吗?
我可以想象一个解决方案,每种情况有两个额外的函数,或者一个在两个点调用func2的版本。但是因为这个呈现的代码只是我真实代码的一个非常简化的版本,所以如果有更简单的解决方案,我会徘徊。
最好是适用于 C 和 C++ 的解决方案。
提前感谢大家!
这有效吗?
void func1(const int* value, bool change)
{
const int* valueToUse;
int changedValue;
if(change)
{
changedValue = (*value) + 1;
valueToUse = &changedValue;
}
else
{
valueToUse = value;
}
func2(valueToUse);
}
const int*
是指向const int
的指针,而不是指向int
的const
指针。因此,指针本身可以自由更改。
此外,递增(*value)
是一个错误,因为*value
是一个const int
。
在 func1 中,您可以对 func2 进行 2 次调用,这样在不需要时没有副本,并且永远不会更改原始值:
void func1(const int* value, bool change)
{
if(change)
{
int changedValue = *value+1;
func2(&changedValue);
}
else
{
func2(value);
}
}
void func1(const int* value, int change)
{
int* valueToUse;
if(change)
{
(*(int*)value)++;
valueToUse = (int*)value;
}
else
{
valueToUse = (int*)value; // <= here the Error occurs
}
func2(valueToUse);
}
但是你真的不需要这个valueToUse
,这就是我的想法,所以。
void func1(const int* value, int change)
{
if(change)
(*(int*)value)++;
func2(value);
}
const int* value
这意味着指向常量 intvalue
的指针。不允许更改常量 int 的值。 有两种方法可以解决这个问题。
- 更改第一个函数
void func1(int* value, bool change)
的签名 - 使用
const_cast
和更改进行常量强制转换后将参数传递给 func1int changedValue = (*value)++;
到int changedValue = *value + 1;
好吧,运行此代码我只收到一个警告,尽管我认为类型转换会对您有所帮助。
valueToUse = (int*)value;
相关文章:
- 使用共享指针的函数调用,其对象应为 const
- 返回指向对象的指针的函数调用是否为 prvalue?
- VkSurfaceKHR 指针的值在函数调用后更改,无需任何显式赋值
- 指针在函数调用后更改其地址
- C++:这是使用整数变量作为函数调用指针的正确方法吗
- 使用函数指针时,ESP 未在函数调用中正确保存
- 为什么分配了 nullptr 的指针可以调用成员函数?
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- 创建指针时是否没有构造函数调用
- 在父指针上调用虚函数
- 如何从另一个类调用指向成员的指针函数
- 在数组函数指针中调用void
- 这些函数调用的返回指针的区别是什么?
- 为什么我不能在插入的函数调用中直接使用返回的指针作为参数
- C++ 通过函数指针错误调用成员函数
- 函数调用中的 void 指针在 C++ 与 C 中
- 析构函数在与 STL 的共享指针中调用两次
- C++ 指针 - 函数调用中的重新分配
- C++递归指针函数调用
- 如何编写一个可以处理对象或指针函数调用的模板函数