const到非const c ++

时间:2010-11-18 22:52:43

标签: c++ constants const

这是可能的:

将常量变量更改为非常量

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

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编译器

我正在通过命令提示符

进行编译

我认为这可能是您需要的所有信息

告诉我你是否还需要

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

我相信编译器认为您正在尝试更改您分配的字符串。因为它无法改变,这就是为什么它在抱怨。您是否复制了字符串以进行更改?

答案 2 :(得分:1)

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