gpt4 book ai didi

c++ - 调用函数时,C++ 中的 ptr** 和 ptr*& 之间有区别或首选吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:44 24 4
gpt4 key购买 nike

在函数中更改指针是否有区别或首选方法?以这个片段为例

    void change(int** ptr) {
**ptr = 50;
*ptr = nullptr;
}

void change(int*& ptr) {
*ptr = 50;
ptr = nullptr;
}

int main()
{
int a = 5;

int* ptr = &a;
int** ptr2 = &ptr;

std::cout << "value: " << a << std::endl;
std::cout << "value: " << ptr << std::endl;
std::cout << "value: " << ptr2 << std::endl;

change(ptr2);
//change(ptr);

std::cout << "value: " << a << std::endl;
std::cout << "value: " << ptr << std::endl;
std::cout << "value: " << ptr2 << std::endl;


system("pause");

}

似乎这两个更改函数都可以实现我的要求,但我不确定它们之间的区别,除了引用函数不会创建指针的拷贝外?

最佳答案

你可以有一个空指针,但不能有一个空引用。

您可以为第一个提供 nullptr,它将编译 1,因为存在从 std::nullptr_t 到的隐式转换整数**。如果您尝试为第二个提供 nullptr,它将失败。最佳匹配是将 std::nullptr_t 转换为 int*,但您不能将可变引用绑定(bind)到临时引用。

我针对不同的参数传递方式讨论了各种情况 in this answer ,其中还包括对象所有权注意事项(使用 std::unique_ptr)

<子>1。该行为将是未定义的,因为您取消引用它。

关于c++ - 调用函数时,C++ 中的 ptr** 和 ptr*& 之间有区别或首选吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52077522/

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