好吧,我有点生疏了,或者我以前从未注意到这一点。如果之前有人问过这个问题,我提前道歉,但我找不到与我所问内容相关的任何内容,或者我搜索了错误的关键字。所以让我进入正题。当从函数 IE 传递常量引用值时,返回类型是 vector 类型成员变量的常量引用,我似乎无法使用该值。也许我只是太生疏了,一直在用 PHP 和 Javascript 编程,所以我暂时没有使用强类型。
但是,让我向您展示一些代码来确定我在说什么。
#pragma once
#include <vector>
#include <string>
class VectorTest
{
public:
VectorTest()
{
std::string test = "";
for (char letter = 'a'; letter < 'Z'; letter++)
{
test.push_back(letter);
valueToReturn_.push_back(test);
}
}
const std::vector<std::string>& ReturnByConstReference()
{
return valueToReturn_;
}
~VectorTest() {}
private:
std::vector<std::string> valueToReturn_;
};
为简单起见,以上是 Vector 测试类。现在是调用部分
#include <vector>
#include <iostream>
#include <string>
#include "VectorTest.h"
void functionTest(const VectorTest* testItem)
{
std::vector<std::string> test((*testItem).ReturnByConstReference);
}
void functionTest(const VectorTest& testItem)
{
std::vector<std::string> test(testItem.ReturnByConstReference());
}
int main()
{
VectorTest testVectorObject;
//this works however the passing to the functions does not.
std::vector<std::string> test(testVectorObject.ReturnByConstReference());
functionTest(&testVectorObject);
functionTest2(testVectorObject);
}
好吧,所以我不明白为什么 vector 的复制构造函数在 main 中工作,但是如果我将对象 VectorTest 作为 const 引用传递给函数,编译器会立即抛出一个合适的。我知道我忘记了关于将对象作为引用传递然后尝试访问将私有(private)成员变量作为 const 引用传回的函数的一些规则,这样我就可以避免复制的成本。
这当然是我正在尝试做的事情的一个小规模版本,所以我知道在这个例子中复制一份不会那么贵。
我确定我忘记了一些关于为什么这不起作用以及如何让它起作用的事情,所以如果有人可以重温我的内存,我将不胜感激。
再次抱歉,如果这是之前有人问过的问题,但我不确定要输入什么词进行搜索,所以我找不到答案。也很抱歉任何缩进问题,从 Visual Studio 复制到这里有点烦人。
还要重申一下,复制构造函数在 main 中工作,当我将对象传递给包含的函数时,一切都会发生变化。再次感谢您的帮助,如果有任何不明白之处请告诉我。
最佳答案
您的参数是 const VectorTest
但 ReturnByConstReference
不是 const
。
如果您声明 const VectorTest testVectorObject;
main
中失败
使函数const
:
const std::vector<std::string>& ReturnByConstReference() const
关于c++ - 从对象成员传递 const 引用。即 someObject.function(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35485784/