为什么我需要在参数中添加const?

时间:2015-05-27 02:44:44

标签: linux compiler-errors g++ gtkmm

我有这个功能:

void
SpookyBoy( bool Troublemaker, const Glib::ustring& name, HorrorPunkBand& band );

如果我删除了const这个词,我收到了这个错误:

 no known conversion for argument 2 from ‘const char [5]’ to ‘Glib::ustring&’

我只是想知道编译器是什么,有人可以解释为什么编译器可以使用const这个词?

即使我不得不承认这两个问题对于已经知道答案的人来说是相似的(在 fortiori ),但肯定不适用于那些不知道答案的人(在先验)。

1 个答案:

答案 0 :(得分:3)

您显然是使用字符串文字作为参数调用函数

SpookyBoy(..., "1234", ...);

编译器可以隐式地将字符串文字(在本例中为const char [5]类型)转换为类型Glib::ustring。但隐式转换的结果是临时对象。在C ++语言中,只有 const 左值引用可以绑定到临时对象。非const引用不能绑定到临时对象。

在功能声明中没有const,您必须将您的功能称为

Glib::ustring name("1234");
SpookyBoy(..., name, ...);

即。通过显式引入Glib::ustring类型的命名对象并将其作为参数传递。

P.S。另请参阅Why const for implicit conversion?