gpt4 book ai didi

C++ 函数重载混淆了字符串引用和匿名函数

转载 作者:行者123 更新时间:2023-11-30 02:31:10 26 4
gpt4 key购买 nike

我为字符串处理定义了以下函数:

void sub(const std::string & repl){
}

void sub(std::function<std::string()> userfun){
}

当我用匿名函数调用时,没问题

sub([=](){return "a"; });

但是当我用字符串调用时,它失败了

sub("a");

error C2668: 'sub' : ambiguous call to overloaded function

是否可以在使用匿名函数参数调用字符串时避免模棱两可的调用

使用 Visual C++ 2013

更新 2

创建一个新的控制台项目并从 sketch 中放入所有内容,但在 VC++2013 中仍然失败

// overload.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string>
#include <functional>
void sub(const std::string & repl) {
}

void sub(std::function<std::string()> userfun) {

}
int _tmain(int argc, _TCHAR* argv[])
{
sub("a");
return 0;
}

1>------ Build started: Project: overload, Configuration: Debug Win32 ------
1>Build started 2016-06-22 17:55:00.
1>InitializeBuildStatus:
1> Touching "Debug\overload.tlog\unsuccessfulbuild".
1>ClCompile:
1> overload.cpp
1>c:\users\xxxxxx\documents\visual studio 2013\projects\overload\overload\overload.cpp(15): error C2668: 'sub' : ambiguous call to overloaded function
1> c:\users\xxxxxx\documents\visual studio 2013\projects\overload\overload\overload.cpp(10): could be 'void sub(std::function<std::string (void)>)'
1> c:\users\xxxxxx\documents\visual studio 2013\projects\overload\overload\overload.cpp(7): or 'void sub(const std::string &)'
1> while trying to match the argument list '(const char [2])'
1>
1>Build FAILED.
1>

更新:我的VS关于资料: enter image description here

最佳答案

这是一个编译器错误:sub(std::string("a")); 是一个足够的解决方法。 (将匿名临时对象绑定(bind)到 const 引用在 C++ 中是合法的。)

MSVC2013编译语句

std::function<std::string()> foo("a");

显示 "a" 是该类型的有效构造函数参数。 (它似乎错误地使用了构造函数 function( std::nullptr_t ))。

引用:http://en.cppreference.com/w/cpp/utility/functional/function/function

关于C++ 函数重载混淆了字符串引用和匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37963848/

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