c++ - 字符串常量转换问题
伊谢尔伦
伊谢尔伦 2017-04-17 13:17:28
[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类型,编译是可以通过,但是我想的是传入这个字符串并把它赋值给另一个变量,这该怎么解决啊。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
阿神

如果只是不看见这个warning,可以在编译的时候加入 -Wno-write-strings。

如果是想让代码以一种合理的方式组织来避开warning可以用:

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

我个人建议还是用string。

怪我咯

"Hello"这是字符串字面量啊,它放在程序的常量区(编译器有可能给优化掉),所以把地址传递给一个char*自然会报warning的

ringa_lee

要么换const char*,要么用const_cast

我个人也推荐使用std::string

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号