Fin*_*Man 4 c++ arguments constants function
我有以下代码。
const char* my_input = "my string";
void my_function(char* my_argument);
int main()
{
my_function(my_input);
}
void my_function(char* my_argument)
{
/* Do something */
}
Run Code Online (Sandbox Code Playgroud)
请注意,my_function 的参数需要“char*”,但我为其提供了“const char*”。
我的 IDE 给出错误:没有调用“my_function”的匹配函数。
我认为这是因为函数调用被解释为“my_function(const char* my_argument)”,我显然没有定义(并且不想)。
我怎样才能使我的常量输入对于预期的非常量参数有效?
在我的真实程序中,我有一个接受“char*”的函数,但它不会修改它。参数本身可能不是一个常量(通常也不是),但有时我期望一个常量。
它没有被解释为my_function(const char *)调用。它被解释为my_function(char *)调用,因为没有其他版本可用my_function。然而,这是不允许的,因为它违反了 C++ 语言的常量正确性规则。const char *这些规则禁止指针到类型的隐式转换char *。
您必须在这里回答的第一个问题是为什么您试图将指向常量数据的指针传递给可能将其视为非常量(可修改)数据的函数。这明显违反了常量正确性。
如果你my_function并没有真正修改数据,那么下一个问题是为什么用char *参数而不是const char *参数来声明它。
仅作为最后的手段,如果您确定my_function不会真正修改数据,但由于某种原因无法更改其声明(例如第三方代码),您可以通过强制转换为char *类型来解决此问题
my_function(const_cast<char *>(my_input));
Run Code Online (Sandbox Code Playgroud)