gpt4 book ai didi

c++ - 参数定义(类型和名称)和(类型*名称)之间有什么区别?

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

这是一个非常基本的问题,但仍然很高兴听到 C++ 专家的意见。

在 C++ 中有两种非常相似的方法来声明按引用参数。

1) 使用“星号”:

void DoOne(std::wstring* iData);

2) 使用“&”:

void DoTwo(std::wstring& iData);

每种方法的含义是什么?在任何情况下都存在问题吗?

奖励#1:在#1 和#2 中调用方法的正式方式是什么?它们都被称为“通过引用”吗?

好处 #2:故意使用 std::wstring。在每种情况下,对标准库类的影响是什么?

最佳答案

#1 使用指针参数(“将指针传递给”),#2 使用引用参数(“通过引用传递”)。它们非常相似,但请注意,两种情况下的调用代码看起来不同:

std::wstring s;

DoOne(&s); // pass a pointer to s
DoTwo(s); // pass s by reference

有些人更喜欢#1,使用通过指针传递的约定表明该函数可能会更改 s 的值(即使任何一个函数都可以)。其他人(包括我自己)更喜欢 #2,因为通过引用传递不允许传递 NULL。

通过 const 指针或引用传递时还有另一个重要区别。临时变量只能传递给 const 引用参数:

void ByConstPointer(const std::wstring&);
void ByConstReference(const std::wstring*);

void test()
{
ByConstPointer(&std::wstring(L"Hello")); // error: cannot take address of temporary
ByConstReference(std::wstring(L"Hello")); // fine
}

关于c++ - 参数定义(类型和名称)和(类型*名称)之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/948947/

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