gpt4 book ai didi

c++ - 在 C++ 中初始化引用类型

转载 作者:行者123 更新时间:2023-11-28 00:53:08 29 4
gpt4 key购买 nike

我试图更好地理解 C++ 中指针和引用之间的区别。来自 Java 背景,我期望 C++ 中的引用是相似的;我期望一个指针减去指针算术。然而,我一直非常失望,有时甚至感到困惑。经过一番阅读后,我认为我将引用理解为没有指针算法的指针,并且永远不能将其设置为 NULL。为了测试我学到的东西,我决定开始编码。但是,我遇到了这个问题,我不明白为什么我的代码无法编译。

这是我正在尝试的:

  3 void test(biNode*& bn)
4 {
5 string& s("another test");
6 bn = new biNode(s);
7 printf("Just Checking: %s\n", bn->getObject().c_str());
8 }
9
10 int main()
11 {
12 biNode* bn;
13 test(bn);
14 printf("Just Checking: %s\n", bn->getObject().c_str());
15 }

这是我的“biNode” header :

  1 #include <string>
2 #include <iostream>
3
4 using namespace std;
5
6 class biNode
7 {
8 public:
9 biNode(string& s);
10 string& getObject();
11 private:
12 string& obj;
13 };

具有相应的定义:

  1 biNode::biNode(string& s) : obj(s)
2 {}
3 string& biNode::getObject()
4 {
5 return this->obj;
6 }

尝试编译它会产生以下错误:

./test.cpp: In function `void test(biNode*&)':
./test.cpp:5: error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'const char*'

我不明白 'string& s("another test");'无效。谁能解释一下?

提前致谢!

最佳答案

您需要了解的另一条引用规则是临时值(右值)只能绑定(bind)到 const 引用。一旦绑定(bind),临时对象的生命周期就会延长,以匹配它所绑定(bind)到的引用的生命周期。

string& s("another test");

在这里,您尝试将右值(字符串文字 "another test")绑定(bind)到 s,这是一个非 const引用。

将行改为

string const& s("another test");

它会编译。

此外,在您的示例中,将 s 设为引用类型没有任何好处。所以你也可以将行更改为

string s("another test");

并且代码将按预期编译和工作。

关于c++ - 在 C++ 中初始化引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966823/

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