编译以下代码
void f(char *, const char *, ...) {}
void f(const char *, ...) {}
int main()
{
f("a", "b");
}
使用clang时,我遇到了这个错误:
prog.cpp:6:2: error: call to 'f' is ambiguous
f("a", "b");
^
prog.cpp:1:6: note: candidate function
void f(char *, const char *, ...) {}
^
prog.cpp:2:6: note: candidate function
void f(const char *, ...) {}
^
据我所知,在C++中,字符串字面量是常量,因此重载规则应该将第一个变量从考虑中排除,从而明确解决为第二个变量。但我猜Clang会将它们设置为非const以实现兼容性(我知道MSVC也这样做)。
使用哪些编译器标志来修复这个问题?我已经使用了-std=c++11进行编译。
编辑:显式转换为const char* 可以解决这个问题: f((const char*)"a", "b");
但如果我的看法正确,观察到的编译器行为并不符合标准,我希望修复编译器行为而不是符合标准的代码。
char*
,但是没有找到任何一个。至少,没有记录在案的。是时候添加一个了,我猜?顺便提一下,MSVC有一些“严格字符串”开关。 - dypchar *
,那么会存在歧义。 - M.M