如何通过" char * a" to" const char *"?

时间:2016-04-06 15:25:21

标签: c++

你能告诉我将值(char * a)传递给值(const char * b)的方法吗?

例如,

char * str = "Tokyo";
const char *;

"char = str"  is OK? 

3 个答案:

答案 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;