const的疑问

csucdl 2005-09-29 03:58:45
const char* Search(const char **Sourcestring, const char *key, const int &num);
这个函数的参数Sourcestring该传递怎样的实参
我这样作
char *source[] = {"ab", "ac", "ad", "ae"};
然后将source作为实参
但是编译通不过,报错为不能将char*[] 转换为const char**
请教一下
...全文
184 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhbttfile 2005-09-29
  • 打赏
  • 举报
回复
这里可能的原因是,你调用函数的时候,编译器需要做两次转换。C++在做隐式转换的过程中,不允许出现隐式转换两次。
如:
void f(const char **) // 1
{
}

int main()
{
char *source[] = {"ab", "ac", "ad", "ae"}; // 2
f(source); // 3
}

“3”处,如果要把char *[4]转换为“const char **”,首先要把char []隐式转换为char *,然后再把char *转换为const char *。这里已经超越了C++的转换次数的限制。
可以使用你愿意的方法来消除这样的转换次数。
如:
把“1”处修改为:void f(char **)
或者
把“2”处修改为:const char *source[] = {"ab", "ac", "ad", "ae"};
或者做如下修改:

void f(char * const *)
{
}

int main()
{
char **source = new char *[10];
f(source);
}

第三种修改方法比较有意思,呵呵,考虑一下吧。
csucdl 2005-09-29
  • 打赏
  • 举报
回复
这里加上const 其什么作用,为什么要加上
一元指针不用的啊
csucdl 2005-09-29
  • 打赏
  • 举报
回复
megaboy 2005-09-29
  • 打赏
  • 举报
回复
你用的什么编译器啊?BC与VC都可以通过的。
runall 2005-09-29
  • 打赏
  • 举报
回复
const char *source[] = {"ab", "ac", "ad", "ae"};
NetsEagle 2005-09-29
  • 打赏
  • 举报
回复
char *source[] = {"ab", "ac", "ad", "ae"};
============================
加上const
const char *source[] = {"ab", "ac", "ad", "ae"};


另外:const char* Search(const char **Sourcestring, const char *key, const int &num);


const int &num //这里没有这个必要吧,有点看不懂想干什么?去掉const返回索引?

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧