2015-05-17 3 views
0

Рассмотрите следующую программу.Почему компилятор вызывает первую перегруженную функцию, а не вторую?

#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"); 
} 

Что следует изменить в программе, чтобы вторая функция вызывалась вместо первой?

ответ

1

Ну вы передаете в константный символ * при передаче в «строке»

что вы могли бы сделать, это объявить символ * и установить его на что-то, а затем передать его, и он будет идти на второй функция.

"string" - это const char *, который перейдет к первой функции

+0

Спасибо. Оно работает. Любой другой способ сделать это? – Destructor

+0

@meet Что делать? Опять же, «строка» является константой, вы не можете ее изменить. – deviantfan

+0

@deviantfan: Хорошо, я понял. вы хотите сказать, что модификация строкового литерала - это UB в C++, потому что он хранится в памяти только для чтения. правильно? – Destructor

Смежные вопросы