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

浏览:28日期:2023-05-22

问题描述

#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;}

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

问题解答

回答1:

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

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

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

我个人建议还是用string。

回答2:

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

回答3:

要么换const char*,要么用const_cast。

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

相关文章: