你能告诉我将值(char * a)传递给值(const char * b)的方法吗?
例如,
char * str = "Tokyo";
const char *;
"char = str" is OK?
答案 0 :(得分:7)
char * str = "Tokyo";
在c ++中,不允许†。您不能将const数组(例如字符串文字)分配给非const指针。
const char *;
这是不允许的,因为变量声明必须有一个名称(除非它是一个函数参数)。
const char *str = non_const_pointer_or_array;
以上在c ++中没问题。
†c中允许从const到非const的隐式转换,但通常不鼓励编译器警告。它在c ++中已弃用,自c ++ 11以来根本不允许。
答案 1 :(得分:4)
在c ++中,它应该可行。 Native / Builtin类型可以自动转换为更多const,但不能更少const。
因此:
void foo(const char*) {
}
int main() {
char s[] = {'x', 'y', 'z', '\0'};
foo(s); //Compiles fine.
return 0;
}
这编译很好,但反过来说,必须使用const_cast。然而,不应该对编译器撒谎并指出某些东西是非常量的,而实际上它是const,因为在这种情况下程序行为是未定义的(人们无法知道程序的行为可能是什么)。 const_cast通常仅在旧API需要char *参数时使用,尽管它不修改参数,并且永远不应该用于"谎言"到编译器。
示例:
void some_old_api(char*){}
int main() {
const char* cs = "xyz";
some_old_api(const_cast<char*>(cs));
return 0;
}
答案 2 :(得分:-3)
程序中硬编码的字符数组 const char*
,因此您可以将其声明为const char* str = "Tokyo";
或者,当您拥有char* str
时{1}},您可以按如下方式投射:const char* myconst = (const char*) str;