为什么编译器调用第一个重载函数而不是第二个?

问题描述:

考虑以下程序。为什么编译器调用第一个重载函数而不是第二个?

#include <iostream> 
void fun(const char a[]) { 
    std::cout<<"function 1\n"; 
    std::cout<<a<<'\n'; 
} 
void fun(char *a) { 
    std::cout<<"function 2\n"; 
    std::cout<<a<<'\n'; 
} 
int main() { 
    fun("string"); 
} 

我该怎么改变程序中的第二个函数而不是第一个被调用?

那么你传递一个const char *当您在“字符串”通过

你可以做的是宣布一个char *并将其设置为东西,然后通过它,它会进入到第二功能。

“字符串”是一个常量字符*,它将转到第一个函数

+0

谢谢。有用。任何其他方式来做到这一点? – Destructor

+0

@meet要做什么?再一次,“string”是const,你不能改变它。 – deviantfan

+0

@deviantfan:好的,我明白了。你的意思是说修改字符串文字是C++中的UB,因为它存储在只读存储器中。对? – Destructor