const 在这里的目的是什么?

What is the purpose of const here?

我看过以下内容:

void function_name(std::string& txt) const;

上述原型中const的作用是什么?函数的 return 类型是 void 所以没有 return 类型,对我来说它看起来完全没有意义,我已经看到了很多,在传递参数时也是如此:

void function_name(const int a);

为什么 const 会在上面添加任何东西,如果它不是指针或引用,无论如何都不能在函数中更改?

void function_name(std::string& txt) const;

const 主要意味着这是一个 const 成员函数,它不应该改变对象的状态。因此,如果函数更改任何成员变量,都会导致编译错误。

第二种情况:

void function_name(const int a);

这个 const 意味着函数不应该在它的函数体中改变变量 a。但是请注意,对于 intbool 等基本类型,不需要 const。此外,它最有可能在 pass-by-reference 时应用(不是像这样按值传递)。

所以典型的用法更像这样:

void function_name(const some_non_trival_type& a);

据说一开始没有const也可以。

void function_name(const int a)
{
    int b = 10;
    // complex things ...
    std::cout<< a+b;
}

有一天有人认为换行会神奇地提高函数的性能

void function_name(const int a)
{
    a = 10; // Beep! It doesn't compile.
    int b = 10;
    // complex things ...
    std::cout<< a+b;
}

然后这个 const 在执行任何单元测试之前拯救世界。

我想说这个 const 可能有语义告诉别人“不要修改它,因为这个函数根据参数的 constness 正常工作”。

const 方法原型使您也可以将此类方法用于 const 对象,例如:

struct X
{
    void function_name(std::string& txt) const {}
};

int main()
{
    const X x;
    std::string s{"Hallo"};
    x.function_name(s); // will not work if the function is not marked as const!
}

第二种情况

void function_name(const int a);

向编译器提示您将(并且可以)永远不会更改 const 变量的内容。这允许编译器对其进行优化。如果您使用像这样的非平凡对象:

 void function_name(const XYZ x);

它更有意义,因为如果它不是 const,编译器必须为该函数创建对象的完整副本。这也可能被优化掉,但在 const 的情况下,根本不需要复制,因为什么都不会改变。通过标准的聪明编译器,内部生成的代码可以等同于:

 void function_name(const XYZ& x);

 void function_name(XYZ& x);

对于给定的使用 int 的示例,它或多或少没有影响,但阐明了接口。