【问题标题】:Why am I not allowed to assign a result of function returning const char* to char*, bt a string literal(constant) can be assigned to char*? [duplicate]为什么我不允许将函数返回 const char* 的结果分配给 char*,bt 字符串文字(常量)可以分配给 char*? [复制]
【发布时间】:2016-08-19 19:09:57
【问题描述】:

返回const char * 的函数不能分配给char*

const char* func() {
    return "This is a const string two ";
}

但是 char* 直接在 main 中分配了一个常量字符串:

int main() {
    char *d =" this is a const string one"; // works fine
    char *e = func();   // error cannot convert from 'const char *' to 'char *'
    return 1;
}

为什么会有矛盾?

【问题讨论】:

  • 字符串文字是特殊的。特别是,它不是const char*
  • 这是 C 还是 C++?两种不同语言中的字符串文字略有不同。
  • 这确实是自 c++11 以来稍微纠正的不一致行为,在这种情况下,您将收到第一次分配的警告
  • 请删除 C 或 C++ 标签。答案会因语言而异。
  • ISO C++11 不允许从字符串文字转换为 char*,因此您的“工作正常”充其量只是情景。

标签: c++ c


【解决方案1】:

将字符串字面量分配给char* 是从C 继承的,早在C 有const 关键字之前就允许这样做。

在后来的 C++ 标准中,this has been deprecated。现代编译器应该会警告你。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2021-11-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2012-10-16
    • 2011-09-23
    • 2021-08-03
    相关资源
    最近更新 更多