我有这个功能:
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 ),但肯定不适用于那些不知道答案的人(在先验)。
答案 0 :(得分:3)
您显然是使用字符串文字作为参数调用函数
SpookyBoy(..., "1234", ...);
编译器可以隐式地将字符串文字(在本例中为const char [5]
类型)转换为类型Glib::ustring
。但隐式转换的结果是临时对象。在C ++语言中,只有 const 左值引用可以绑定到临时对象。非const引用不能绑定到临时对象。
在功能声明中没有const
,您必须将您的功能称为
Glib::ustring name("1234");
SpookyBoy(..., name, ...);
即。通过显式引入Glib::ustring
类型的命名对象并将其作为参数传递。