常量到非常量 c++

Posted

技术标签:

【中文标题】常量到非常量 c++【英文标题】:const to non-const 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,这是一个很好的问题。 您不能修改字符串文字。您需要复制或重新考虑您要完成的工作。 【参考方案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 的开头复制它,然后改为使用该变量。

【讨论】:

以上是关于常量到非常量 c++的主要内容,如果未能解决你的问题,请参考以下文章

为啥常量整数指针指向允许的非常量整数?

为啥首先允许指针从非常量到常量的隐式转换?

C++基础知识之常量(字面量) 变量

从非常量到常量模板参数的隐式转换在 boost::optional 中不起作用

常量指针不能作为右值赋值给非常量指针

重复、常量和非常量、getter 的宏解决方案?