【问题标题】:const to non-const c++常量到非常量 c++
【发布时间】:2010-11-18 22:52:42
【问题描述】:

这可能吗:

将常量变量更改为非常量

我正在创建一个全新的字符串类,我的构造函数看起来像这样

LString(const char string1[]) {/* whatever I do */}

我不会使用 const 关键字,但这是获得类似字符串的唯一方法

LString ls = "a string";

我会有很多函数来修改这个字符串

即使我复制了这个字符串,我仍然无法将 const 转换为非 const

可以吗

如果没有,谁能想到漏洞

好的,所以有人说没有问题,这是我的代码

#include <iostream>
#include <cstdlib>
using namespace std;
class LString
{
public:
LString(const char string1[]){
char s1[250] = {string1};
cout << "you constructed LString with a const string as a parameter";
}

};

这会出现以下错误

file.cpp: 在构造函数中'LString::LString(const char*)':

file.cpp:7:24: 错误:从 'const char*' 到 'char' 的无效转换

如果这有所作为,我使用的是没有 IDE 的 mingw 编译器

我正在通过命令提示符编译

我想这就是你可能需要的所有信息

如果您需要,请告诉我

【问题讨论】:

  • 我真的看不出是谁在你的问题中加了一个(-1),这太糟糕了,我很抱歉;无论是谁做的,都忽略了 SO 的重点,即让人们能够对编程提出问题,就我而言,你的问题非常适合。
  • @Bruno:同意。对这个问题 +1,这是一个很好的问题。
  • 您不能修改字符串文字。您需要复制或重新考虑您要完成的工作。

标签: c++ constants


【解决方案1】:

您的构造函数很好 - 输入应该是 const。

副本可以是非常量的,没问题。

#include <string.h>
class A {
  public:
  A(const char* string)
    : a(strdup(string))
  {}
  char* a;
};

这里我使用 strdup 来制作副本。你在用什么?

【讨论】:

  • 请在析构函数中释放()复制的字符串或使用std::string。否则这个过于简单的例子会泄漏内存。
  • 使用std::string const &amp; 参数和std::string 成员,内存管理已为您完成。
  • @lothar true,但我试图解决问题,而不是内存管理。
【解决方案2】:

我相信编译器认为您正在尝试更改您分配的字符串。既然无法改变,那就是抱怨的原因。您是否复制了要更改的字符串?

【讨论】:

    【解决方案3】:

    我没有看到问题。保持构造函数签名不变,但将内部变量设为非 const 并将其复制过来。在 func 的开头复制它,然后改为使用该变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      相关资源
      最近更新 更多