【发布时间】:2016-02-25 06:59:51
【问题描述】:
我确实有一个“C”函数
find_register(char *name)
从“C++”例程中调用。调用它的第一个提示是
find_register("%ebx")
这会导致警告
deprecated conversion from string constant to 'char*'
好的,我更正了
find_register(string("%ebx").c_str())
这会导致错误消息
"invalid conversion from 'const char*' to 'char*'
最后,
find_register((char*)string("%ebx").c_str())
在没有错误消息和警告的情况下被接受。
我的问题: 1./错误消息的可能原因是更改“const char *”的可能性是开放的。没关系,但在第一种情况下,不太复杂的版本允许这样做,并且将字符串常量转换为 'char *' 是合法的,但不推荐使用的转换。有没有更深层次的原因?
2./ 有什么简单的方法可以做我想做的事吗? (对于程序员来说,完美的(编译器)代码很难读懂)
【问题讨论】:
-
你要输入一个变量,
find_register(char *name)就可以了。但是你输入了一个文本,就不行了 -
find_register(string("%ebx").c_str())没有“纠正”,只是让问题变得更糟。 -
我假设您不想更改在 find_register 函数中用作查找键的寄存器名称 - 那么为什么不告诉编译器呢?声明函数,使其接受“const char *”
-
@tofro 你说得对,但我在我的应用程序中调用了一个带有第三方字符串数组的第三方函数。