Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我们需要将const放在函数GetMax的开头? #包括 #包括 使用名称空间std; 样板 常量类型和GetMax(类型和值1、类型和值2) { 如果(值1>值2) 返回值1; 其他的 返回值2; } 样板 无效显示比较(常量类型和值1、常量类型和值2) { cout_C++ - Fatal编程技术网

C++ 为什么我们需要将const放在函数GetMax的开头? #包括 #包括 使用名称空间std; 样板 常量类型和GetMax(类型和值1、类型和值2) { 如果(值1>值2) 返回值1; 其他的 返回值2; } 样板 无效显示比较(常量类型和值1、常量类型和值2) { cout

C++ 为什么我们需要将const放在函数GetMax的开头? #包括 #包括 使用名称空间std; 样板 常量类型和GetMax(类型和值1、类型和值2) { 如果(值1>值2) 返回值1; 其他的 返回值2; } 样板 无效显示比较(常量类型和值1、常量类型和值2) { cout,c++,C++,我将提出关于const的几点意见,以便明确您可以根据需要使用的时间和内容: 案例1:GetMax(常量类型值1) 这里value1是本地副本,我可以想到几点 我可以想出几个理由: 1) 当有人阅读代码并看到const Type value1时,他们知道不应在函数体中修改value1 2) 当您试图修改函数体中的value1时,编译器会告诉您。因此,添加const可以防止错误 3) 但是,C++11中还有另一个区别。常量对象不能从中移动,因为移动操作会修改对象。因此,您只能在函数体中复制value

我将提出关于const的几点意见,以便明确您可以根据需要使用的时间和内容:

案例1:
GetMax(常量类型值1)

这里value1是本地副本,我可以想到几点

我可以想出几个理由:

1) 当有人阅读代码并看到
const Type value1
时,他们知道不应在函数体中修改
value1

2) 当您试图修改函数体中的
value1
时,编译器会告诉您。因此,添加
const
可以防止错误

3) 但是,C++11中还有另一个区别。常量对象不能从中移动,因为移动操作会修改对象。因此,您只能在函数体中复制
value1
,并且不能从中移动

4) 此外,如果这是类类型,则不能对常量对象调用非常量成员函数

案例2:
GetMax(常量类型和值1)

我们不知道函数外部如何使用
value1
,因此我们希望保护它不被修改

案例3:
const Type&GetMax()

在函数之前谈论
const
,意味着它将返回
const
类型的引用(此处
GetMax

举个例子:

#include <iostream>
#include <string>
using namespace std;

template <typename Type>
const Type& GetMax(Type& value1,Type& value2)
{
    if(value1 > value2)
        return value1;
    else
        return value2;
}
template<typename Type>
void DisplayComparison(const Type& value1,const Type& value2)
{
    cout<<"GetMax("<<value1<<","<<value2<<") = ";
    cout<<GetMax(value1,value2)<<endl;
}
int main()
{
    int Int1 = -102, Int2 = 2001;
    DisplayComparison(Int1,Int2);

    double d1 = 3.14,d2 = 3.1416;
    DisplayComparison(d1,d2);

    string Name1("Jack"),Name2("John");
    DisplayComparison(Name1,Name2);

    return 0;
}

因此,总而言之,您不需要“使用”
const
除非您有上述要求,尽管在少数情况下这样做可能是一种良好的做法。

所有这些以及更多内容都在任何情况下进行了解释,即
const
不限定函数本身。它限定返回类型。您提到的该参数的潜在
const
也是如此成员函数限定符位于末尾,如
void foo()const
。这太复杂了,只需返回
Type
而不返回
const-Type&
@acraig5075这两个类型不一定相等。某些类型不可复制,而其他类型的复制成本很高。在这种情况下,函数将返回对其中一个参数的引用。更改返回类型将极大地改变因此,如果我在函数的开头加上一个常量,特别是在这种情况下,这意味着返回类型不能被修改,对吗?
Class xyz;
Type& t = xyz.GetMax()           //This is INCORRECT
const Type& tc = xyz.GetMax()    //This is OKAY!