gpt4 book ai didi

c++ - 重载、字符串和默认参数

转载 作者:太空宇宙 更新时间:2023-11-04 15:29:00 26 4
gpt4 key购买 nike

重构遗留代码,遇到这个函数(伪代码):

int getMessage( char * buffer, int size = 300 );

哎呀,看看那个等待溢出的缓冲区。所以我想出了一个使用 std::string 的函数,并认为使用函数重载会很好:

int getMessage( std::string & buffer );

到目前为止,还不错。但是当我尝试使用字符串调用函数时:

std::string buffer;
int rc = getMessage( buffer );

我收到这个错误:

cannot convert 'std::string' to 'char*' for argument '1' to 'int getMessage(char*, int)'

显然,编译器(GCC 4.1.2)努力将 std::string 转换为 char* 以满足第一个函数的参数列表(使用默认值来满足第二个参数),但放弃了,但没有尝试第二个功能...

解决这个问题我不会有问题,但我想知道为什么会失败,以及是否有办法让它按预期工作。

最佳答案

它在我的 GCC 4.3.2 上按预期工作,也许你拼错了重载的名称?没有从 std::string 到 char* 的转换,因此编译器在选择正确的重载时应该没有任何问题。

$ cat test.cpp
#include <string>
#include <stdio.h>

int getMessage( char * buffer, int size = 300 )
{
printf("1\n");
return 1;
}

int getMessage( std::string & buffer )
{
printf("2\n");
return 2;
}

int main()
{
std::string buffer;
buffer = "Hello";
int rc = getMessage( buffer );
}

$ g++ test.cpp -Wall -pedantic
test.cpp: In function ‘int main()’:
test.cpp:20: warning: unused variable ‘rc’
$ ./a.out
2
$ $ g++ -v 2>&1|tail -n1
gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu12)
$

关于c++ - 重载、字符串和默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/565360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com