-1

我已经阅读了关于 const 的用例,并且我觉得我对 const 大部分情况都有很好的理解。但是,我似乎无法弄清楚为什么我不经常看到这个:

void someFunction(const string& A) const

在 const 成员函数中有 const 参数的地方。出于某种原因,每当我查找示例并且函数是 const 时,const 似乎被剥离了这样的参数:

void someFunction(string& A) const

然而,这似乎并没有阻止我修改 A。在 const 成员函数中具有 const 参数是否被认为是不好的形式?

如果不修改 A,那么不将 const 保留在参数中的原因是什么?

编辑:这是我没有澄清的错,但我理解在参数之前添加它和在函数之后添加它之间的区别。我看过的很多代码从未将两者结合起来,我只是想弄清楚是否有这样做的原因。

4

2 回答 2

4
void someFunction(const string& A) const

最后一个const意味着该方法不会改变*this它内部引用的对象的状态。第一个const是说该函数不会改变参数的状态 - 它与第二个没有任何关联const,所以你可能有这个:

void someFunction(string& A) const

在这种情况下,函数可能会改变A参数的状态,但它可能不会改变其对象的状态。

例如(这是一个高度假设的例子):

class MyIntArray
{
 // some magic here in order to implement this array    

public:
 void copy_to_vector(std::vector<int> &v) const
 {
    // copy data from this object into the vector.
    // this will modify the vector, but not the
    // current object.
 }

}

这是这两者结合的例子:

class MyOutput
{
    char prefix;
    // This class contains some char which
    // will be used as prefix to all vectors passed to it
public:
     MyOutput(char c):prefix(c){}
     void output_to_cout(const std::vector<int> &i) const
     {
        // iterate trough vector (using const_iterator) and output each element
        // prefixed with c - this will not change nor the vector
        // nor the object.
     }

}

哦,看看这个问题:Use of 'const' for function parameters

于 2013-10-09T23:35:07.990 回答
2

conston a function 仅适用于成员函数。它声明类对象不会被修改。这并不意味着不能修改通过引用传递的函数参数。

将参数传递给函数const &可防止您修改参数。

class A
{
private:
    int data;
public:
    void func1(const std::string& s) const; // s cannot be modified, members of A cannot
    void func2(std::string& s) const; // s can be modified, members of A cannot

    void func3(const std::string& s); // s cannot be modified, members of A can be
    void func4(std::string& s); // s can be modified, as can members of A
};

标记的功能const不能改变,但除非被标记,否则data没有这样的限制。sconst

于 2013-10-09T23:38:42.180 回答