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

Why do I need to add const to the argument?

我有这个功能:

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),但对于还不知道答案的人来说肯定不是(在 priori)。

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

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

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

如果函数声明中没有 const,您必须将函数调用为

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

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

P.S。另见 Why const for implicit conversion?