首页 > 解决方案 > 为什么在这种情况下编译器会选择错误的重载?

问题描述

考虑这个相当简单的代码(godbolt):

#include <cstddef>
#include <string>

using namespace std;

string f(char const* fmt, ...);
size_t f(char* buf, size_t sz, char const* fmt, ...);

void bar()
{
    f("%c%s", 'A', "AAA");
}

第一个参数的类型应该是char const[5],这意味着甚至不应该考虑第二个重载。然而编译器(即使它有点抱怨)选择了它(正如您在生成的程序集中看到的那样)。

有人可以准确解释这里发生了什么吗?

笔记:

标签: c++

解决方案


推荐阅读