C++ 非成员函数声明开头的const有什么作用?

C++ 非成员函数声明开头的const有什么作用?,c++,constants,function-declaration,non-member-functions,C++,Constants,Function Declaration,Non Member Functions,翻阅MSDN,我遇到了另一条奇怪的线路: // This function returns the constant string "fourth". const string fourth() { return string("fourth"); } 这里隐藏了完整的示例:细化到最低限度,如下所示: #include <iostream> const int f() { return 0; } int main() { std::cout << f() &

翻阅MSDN,我遇到了另一条奇怪的线路:

// This function returns the constant string "fourth".
const string fourth() { return string("fourth"); }
这里隐藏了完整的示例:细化到最低限度,如下所示:

#include <iostream>

const int f() { return 0; }

int main() {
    std::cout << f() << std::endl;

    return 0;
}
#包括
常量int f(){return 0;}
int main(){

std::cout您不能修改返回的对象

例如:

#include <string>
using namespace std;

const string foo(){return "123";}
string bar(){return "123";}

int main(){
    //foo().append("123"); //fail
    bar().append("123"); //fine
}
#包括
使用名称空间std;
常量字符串foo(){return“123”;}
字符串栏(){return“123”;}
int main(){
//foo().append(“123”);//失败
bar().append(“123”);//很好
}

这几乎与常量变量相同

#include <string>
using namespace std;

const string foo = "123";
string bar = "123";

int main(){
    //foo.append("123"); //fail
    bar.append("123"); //fine
}
#包括
使用名称空间std;
常量字符串foo=“123”;
字符串bar=“123”;
int main(){
//foo.append(“123”);//失败
bar.append(“123”);//很好
}

它是返回类型的一部分。函数返回
const string
const int

const int
的情况下,与
int
相比,这确实没有什么区别,因为使用
int
返回值只能将值复制到某个地方(事实上,标准明确规定
const
在这里无效)

对于
const string
,它确实起到了作用,因为类类型的返回值可以调用成员函数:

fourth().erase(1);
如果
fourth()
返回一个
const字符串
,则编译将失败,因为
erase()
不是
const
方法(它尝试修改调用它的
字符串

就我个人而言,我从不让值返回函数返回一个
const
值,因为它不必要地限制了调用者(尽管有些人认为防止编写类似
string s=fourth().erase(1);
)的内容很有用)