首頁  >  問答  >  主體

c++ - 字符串常量转换问题

#include <iostream>
#include <cstring>

class CTextBlock
{
public:
    CTextBlock(char* tmp)
    {
        pText = tmp;
    }
    char& operator[](std::size_t position) const
    {
        std::cout << "const function" << std::endl;
        return pText[position];
    }
private:
    char* pText;
};

int main()
{
    const CTextBlock cctb("Hello");
    char* pc = &cctb[0];
    *pc = 'J';
    return 0;
}


这个问题怎么解决哦?
我尝试注释掉构造函数中的那一条语句,并把传入参数修改为const类型,编译是可以通过,但是我想的是传入这个字符串并把它赋值给另一个变量,这该怎么解决啊。

伊谢尔伦伊谢尔伦2764 天前576

全部回覆(3)我來回復

  • 阿神

    阿神2017-04-17 13:19:28

    如果只是不看見這個warning,可以在編譯的時候加入 -Wno-write-strings。

    如果是想讓程式碼以合理的方式組織來避開warning可以用:

    char c[] = "Hello";
    const CTextBlock cctb(c);
    

    我個人建議還是用string。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 13:19:28

    "Hello"這是字串字面量啊,它放在程式的常數區(編譯器有可能給最佳化掉),所以把位址傳遞給一個char*自然會報warning的

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 13:19:28

    要嘛換const char*,要嘛用const_cast

    我個人也推薦使用std::string

    回覆
    0
  • 取消回覆