从对象成员传递常量引用.IE someObject.function()
Passing by const reference from a object member. IE someObject.function()
好吧,我生锈了,或者我以前从未注意到这一点。如果之前有人问过这个问题,我提前道歉,但我找不到与我所问的内容相关的任何内容,或者我搜索了错误的关键字。所以让我进入正题。从函数 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_;
};
以上是为简单起见的向量测试类。 现在对于调用部分
#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 引用传回的函数的规则,这样我就可以避免复制的成本。
这当然是我正在尝试做的一个小版本,所以我知道在这个例子中副本不会那么昂贵。
我确定我忘记了一些关于为什么这不起作用以及如何让它工作的事情,所以如果有人可以刷新我的记忆,我将不胜感激。
再次抱歉,如果这是以前问过的问题,但我不确定输入什么术语进行搜索,所以我找不到答案。也很抱歉任何缩进问题,从Visual Studio复制到这里有点烦人。
还要重申一下,复制构造函数在 main 中工作,当我将对象传递给包含的函数时,一切都会横向发展。再次感谢您的帮助,如果有任何没有意义的,请告诉我。
您的参数显示const VectorTest
但ReturnByConstReference
不是const
。
如果您声明main
,它也会在失败const VectorTest testVectorObject;
使函数const
:
const std::vector<std::string>& ReturnByConstReference() const
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- C++ - 在浏览器中执行JavaScript的库(IE 11和Edge)
- 如何隐藏显示HTML5标记的Web浏览器控件(IE)的滚动条和窗口边框
- IE 探索 11 < c++ ATL COM 浏览器帮助程序对象(加载项)来替换 DOM 中的文本
- 如何在低文件夹中获取IE cookie
- IE扩展-正在注入Javascript文件
- Windows窗体应用程序无法播放视频[VLC ActiveX插件和IE Web插件v2]
- IHTMLDocument2::get_body 在 CHtmlView for IE 11 中失败
- 创建在新Windows桌面上运行IE的过程
- iwebbrowser2 ie = edge和用户代理字符串
- IE 扩展,用于在网页中注入 JavaScript
- 什么是 ISO/IE 10646 中的"character short name"?
- 以编程方式在 IE 中设置页面缩放和文本大小
- DialogBoxParam()方法未调用IE 9或更高版本中的GUI
- 如何从IE打开新选项卡
- 在哪里可以找到IE浏览器的下载历史记录
- 将URL从服务添加到IE缓存
- (IE BHO)从BeforeNavigate2事件获取IWebBrowser2
- IE浏览器IFolderview2创建文件夹发布通知
- 从对象成员传递常量引用.IE someObject.function()