gpt4 book ai didi

C++ 演示函数同时使用一个 const 参数,它是一个指针,这是为什么?

转载 作者:行者123 更新时间:2023-11-28 01:14:02 25 4
gpt4 key购买 nike

std::filesystem c++17 库文档中,有多个函数输入实例是 const,但也使用其引用。

void demo_exists(const fs::path& p, fs::file_status s = fs::file_status{});

当然 const& 是矛盾的。我的理解是,当您不想修改变量时使用 const ,当您想要在函数中改变多个参数而不必返回它们时使用 &作为数组。

当然,同时使用 const& 是矛盾和令人困惑的,或者是否有理由同时使用它们?

提前致谢

来自文档的原始示例 https://en.cppreference.com/w/cpp/filesystem/exists

最佳答案

My understanding is that const is used when you don't want the variable to be modified and an & when you want to mutate multiple arguments within the function without having to return them as an array after.

这不太正确。当你想避免复制时,你可以通过引用传递。尽管自从引入移动语义以来,通过 (const) 引用传递的许多用法都已过时。

当方法不修改参数时,您将引用声明为 const,而当它必须修改参数时,则声明为非 const。

例子:

void foo(const SomeLargeObject&); // pass by reference to avoid copy

void bar(int&); // pass non-const reference to modify the parameter

附言:

C++ demo function uses both a const argument that is a pointer why is this?

这里没有一个指针。可能令人困惑的是地址关闭运算符和引用类型的符号是相同的:&。但是,它有两个截然不同的含义:

 int x = 0;
int* pointer_to_x = &x; // here it is address-of operator
int& reference_to_x = x; // here it declares reference_to_x as reference to int

PS2:为了完整起见,我想再提一件事。 C++ 中的第二个不幸的事情是“引用”通常是指 C++ 引用(参见上面的示例)。另一方面,术语“按引用传递”在更广泛的上下文中使用,并在“某些引用”的含义中使用“引用”,即它可以是引用,也可以是指针。在更广泛的意义上 (*) 这两个都是通过引用传递的,允许该方法修改所引用的内容:

void foo(int& x);   // A
void foo(int* x); // B

在 C++ 中,引用 (A) 应该是首选,除非“无值”(即空指针)是有效输入。

(*) 准确的说指针本身实际上是按值传递的。

关于C++ 演示函数同时使用一个 const 参数,它是一个指针,这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59285819/

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