gpt4 book ai didi

c++ - 为什么要将对象的拷贝作为函数的参数?为什么 const ref 不是参数的默认方式?

转载 作者:行者123 更新时间:2023-12-02 11:15:37 27 4
gpt4 key购买 nike

尽管我很喜欢 C++ 编程,但有一件事我确实不明白。对我来说,最常见的函数编程方式似乎是这样的:

some_function(a variable)
do something according to the data in the variable

示例:

bool match_name(const std::string& name)
{
return this->name == name;
}

我发现自己在代码中使用 const ref 来处理 90% 的函数参数(也许我做错了什么)。

我的问题是:为什么变量的拷贝是参数的“默认”类型?为什么 const ref 不是默认值?

为什么不类似?:

void my_function(My_type object)      // <- const ref

void my_function(ref My_type object) // <- ref (mutable)

void my_function(copy My_type object) // <- copy

最佳答案

除了历史原因之外,这还会产生非常丑陋的影响。它基本上意味着 MyType myVarName 当是函数范围或在函数参数列表中使用时将具有不同的含义。

void foo(MyType myVar) //myVar is const ref
{
MyType anotherVar = myVar; // anotherVar is a copy, what?
const MyType& myVarRef = myVar; //a reference, but it looks like it has different type than myVar?
}

想想可怜的&!除非你提出一种不同的方法来区分引用和非引用,否则你最终会得到

void foo(MyType& myVar) //myVar is a copy?
{
MyType& anotherVar = myVar; // anotherVar is a reference???
}

C++ 有一个完善的对象和对象引用的概念。后者始终通过在类型中添加 & 来表示。你的提议会把事情搞砸,而且 C++ 会比现在更难理解。

关于c++ - 为什么要将对象的拷贝作为函数的参数?为什么 const ref 不是参数的默认方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60522677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com