C++ 非成员函数声明开头的const有什么作用?
翻阅MSDN,我遇到了另一条奇怪的线路: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() &
// 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);
)的内容很有用)