常量到非常量 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 &
参数和std::string
成员,内存管理已为您完成。
@lothar true,但我试图解决问题,而不是内存管理。【参考方案2】:
我相信编译器认为您正在尝试更改您分配的字符串。既然无法改变,那就是抱怨的原因。您是否复制了要更改的字符串?
【讨论】:
【参考方案3】:我没有看到问题。保持构造函数签名不变,但将内部变量设为非 const 并将其复制过来。在 func 的开头复制它,然后改为使用该变量。
【讨论】:
以上是关于常量到非常量 c++的主要内容,如果未能解决你的问题,请参考以下文章