【发布时间】:2018-07-19 05:47:21
【问题描述】:
演示问题的代码示例:
#include <functional>
#include <set>
void useCallback(std::function<void(char *)> callback)
{
}
int main()
{
std::function<void(char const *)> callback = [](char const *)
{
};
useCallback(callback);
return 0;
}
是的,const 删除在一天结束时是良性的,useCallback() 在其 API 中声明它准备接受并使用修改其参数的回调,所以它会做得很好没有的功能。
那么为什么阻止将std::set<char *> 传递给期望std::set<char const *> 的函数的参数在这里不适用?该论点正确地指出 char * 和 char const * 是不同的类型,因此这两个集合不是类型等价的。
记住这一点,为什么callback 的类型和useCallback() 的参数没有被认为不同?
-- 编辑--
这是使用 MSVC,VS 2017。
【问题讨论】:
-
你使用的是哪个编译器?
-
这是使用 MSVC。我很想知道 GCC 的想法。
-
@dgnuff 你可以在gcc.godbolt.org在线试用
标签: c++ constants language-lawyer