n*******s 发帖数: 482 | 1 这个是书上的一个章节总结的题目,不会做。
C++ Strategies and Tactics 第二章的一个问题
9。假设我们正使用String类, 它提供了一个operator const char*的转换函数:
class String
{
public:
operator const char*() const;
}
另有一个remove_blanks函数
void remove_blanks(char* cp)
{
char* p = cp;
while(*p)
{
if(*p!= ' ' )
*cp++ = *p;
++p;
}
*cp = '\0'
}
如果有人这样用
String s(" hello world ");
remove_blanks((char*)(const char*)s);
这样用有什么问题呢?
/**
* 我觉得如果 调用的时候写成
* remove_blanks |
o******r 发帖数: 259 | 2 我看没问题
你干嘛不试试,告诉大家结果
【在 n*******s 的大作中提到】 : 这个是书上的一个章节总结的题目,不会做。 : C++ Strategies and Tactics 第二章的一个问题 : 9。假设我们正使用String类, 它提供了一个operator const char*的转换函数: : class String : { : public: : operator const char*() const; : } : 另有一个remove_blanks函数 : void remove_blanks(char* cp)
|
n*******s 发帖数: 482 | 3 刚刚测试了,const char* 到char*的转换 编译无法通过。此类转换没有意义。 |
o******r 发帖数: 259 | 4 那是你没写对吧,(char*)((const char*)s)
试试下面这个:
const char chT1[] = "Hello!";
const char* pch1 = chT1;
cout << pch1 <
char* pch2 = (char*)chT1;
pch2[5] = '?';
cout << pch2 <
【在 n*******s 的大作中提到】 : 刚刚测试了,const char* 到char*的转换 编译无法通过。此类转换没有意义。
|
n*******s 发帖数: 482 | 5 恩 仔细看了一下,是我的测试代码写错了。
String s(" hello world ");
cout<
const char* o = (const char*)s;
cout<<"const char* o="<
char* o1 = (char*)o;
cout<<"char* o1="<
remove_blanks(o1);
cout<<"remove_blanks(const char* -> char*)o1="<
结果没啥问题。
我想对于这种Const char* --> char*的转换,如果后面对char*的操作是变短 就没
啥问题,如果变长 可能会覆盖其他变量吧。
谢谢observer RP++
:) |
o******r 发帖数: 259 | 6 变长?
那是 bug
正常没那么干的
【在 n*******s 的大作中提到】 : 恩 仔细看了一下,是我的测试代码写错了。 : String s(" hello world "); : cout<: const char* o = (const char*)s; : cout<<"const char* o="<: char* o1 = (char*)o; : cout<<"char* o1="<: remove_blanks(o1); : cout<<"remove_blanks(const char* -> char*)o1="<: 结果没啥问题。
|