【问题标题】:Const at the end of function declaration in C++ [duplicate]C++中函数声明末尾的常量[重复]
【发布时间】:2012-05-09 05:51:47
【问题描述】:

可能重复:
Meaning of “const” last in a C++ method declaration?

在下面的函数声明中,

const char* c_str ( ) const;  

第二个 const 做什么?

【问题讨论】:

  • 这是一个微软实习面试问题。

标签: c++ function constants


【解决方案1】:

这意味着该方法是一个“const 方法”调用这样的方法不能更改任何实例的数据(mutable 数据成员除外)并且只能调用其他 const 方法。

可以在 const 或非 const 实例上调用 const 方法,但只能在非 const 实例上调用非 const 方法。

struct Foo {
  void bar() const {}
  void boo() {}
};

Foo f0;
f0.bar(); // OK
fo.boo(); // OK

const Foo f1;
f1.bar(); // OK
f1.boo(); // Error!

【讨论】:

  • +1 表示“有一些例外”
【解决方案2】:

const 只能标记到成员函数上。它保证它不会改变任何对象的数据成员。

例如,由于它,以下将是编译时错误:

struct MyClass
{ 
    int data; 
    int getAndIncrement() const;
};

int MyClass::getAndIncrement() const
{
    return data++; //data cannot be modified
}

【讨论】:

  • 不完全正确,请参阅 juanchopanza 的回答
  • @SethCarnegie,同意。我想我应该提到可变数据成员,尽管您不会经常看到它们出现。
【解决方案3】:

它是一个影响该方法的修饰符(它只适用于方法)。这意味着它只会访问而不是修改对象的状态(即不会更改任何属性)。

另一个微妙的变化是这个方法只能调用其他const方法(让它调用可能会修改对象的方法是没有意义的)。有时,这意味着您需要某些方法的两个版本:const 和非const 一个。

【讨论】:

  • 不完全正确,请参阅 juanchopanza 的回答
猜你喜欢
  • 2011-04-14
  • 2011-03-09
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2010-11-08
相关资源
最近更新 更多