【问题标题】:Why do I need to add const to the argument?为什么我需要将 const 添加到参数中?
【发布时间】:2015-05-27 02:44:44
【问题描述】:

我有这个功能:

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

【问题讨论】:

  • 你的函数声明真的像这样吗?根据错误消息,ustring 参数显然声明为const Glib::ustring& name,即作为参考。
  • @AnT 是的,你说得对,我忘了给你的 & +1

标签: linux compiler-errors g++ gtkmm


【解决方案1】:

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

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

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

如果函数声明中没有const,您将不得不将您的函数称为

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

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

附:另见Why const for implicit conversion?

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2013-08-30
    • 2017-03-04
    • 2014-06-11
    相关资源
    最近更新 更多