gpt4 book ai didi

C++)为什么 const int*& 参数不能采用 int* 参数?

转载 作者:行者123 更新时间:2023-12-02 18:16:05 25 4
gpt4 key购买 nike

在写作之前,我的英语不太好。所以可能有很多尴尬的句子。

void Func1(const int* _i) {  };
void Func2(const int& _j) { };
void Func3(const int* (&_k)) { };
int main()
{
int iNum = 1;
int* pInt = new int(1);
Func1(pInt); // works;
Func2(iNum); //works
Func3(pInt); // error
}

我使用 Visual Studio 并显示错误消息“无法将参数 1 从 'int *' 转换为 'const int *&'”

我知道它无法转换,因为“&”。 _i 等于 pInt,因此它可能会更改取消引用。但我用的是const。所以我认为它会起作用,但 const 关键字不起作用。为什么 const 关键字与其他情况不同?例如)Func1,Func2

最佳答案

Func1(pInt); // works; int* could convert to const int* implicitly
Func2(iNum); //works; int could be bound to const int&
Func3(pInt); // error;

pInt 是一个 int*,当传递给 Func3 时,它需要对 const int* 的引用,然后它会被转换为 const int*,这是一个临时的,不能像 const int* & (lvalue -引用非常量指向 const int 的指针)。

如果将Func3的参数类型改为int* &,则无需转换,直接绑定(bind)pInt即可。或者更改为 const int* const & (左值引用指向 const int 的 const 指针)或 const int* && (右值引用)可以绑定(bind)到临时的。

关于C++)为什么 const int*& 参数不能采用 int* 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71566083/

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