reference相关内容
我感到困惑: 返回对象函数中的变量,这消耗了内存) 返回指针(但是你必须记住删除它,在调用代码中, 返回引用(但这不可能,因为这将是对函数的局部变量的引用,一旦函数结束) 我正在寻找从C ++函数返回对象的正确方法,在基本C ++中(没有库处理指针和自动释放内存)。 谢谢 解决方案 现代编译器通常会实施(命名)返回值优化,通过它,您引用(并且逻辑上期望)的副本不会完成
..
当我阅读 litb回答这个问题,我学到了通过引用传递数组允许我们获得它的大小。我只是打了一点代码,并试图通过引用传递一个“函数”,令人惊讶(至少对我来说),这段代码编译: void execute(void(& func)())// func通过引用传递! { func(); } 最后一个函数和这个函数之间有什么区别: void execute(void
..
对于 std :: map 和 std :: tr1 :: unordered_map ,我看到从标准: 在unordered_map容器中引用元素在 中仍然有效,即使在重新哈希后也是如此。 他们是如何做的(实现方式)?它们是否将所有条目保存为一种链接列表,然后散列表只存储指向元素的指针? 解决方案 是的,涉及链接列表,尽管不太符合你的建议。 2011标准说(23.2.
..
根据Bjarne Stroustrup,引入了C ++以支持运算符重载: 引用主要是为了支持运算符重载。 C通过值传递每个函数参数,并且按值传递对象的效率低或不适当,用户可以传递指针。在使用操作符重载的情况下,此策略不起作用。在这种情况下,符号的便利是必要的,因为如果对象很大,用户不能期望插入操作符的地址。例如: a = b - c; 是可接受的(即常规)
..
在32位机器上,我总是得到一个引用4字节的 sizeof ,即使它是一个double的引用,那么它真正存储在这4字节。 编辑: { public: double&一个; }; int main(){ cout
..
假设下面的代码 struct S { S(int& value):value_ value){} int&值_; }; S function(){ int value = 0; return S(value); //隐式返回对本地值的引用 } 编译器不会产生警告) 有什么工具可以帮助捕获这些问题 解决方案 有基于运行时的解决方案,它
..
这是一个来自OOP高级课程的考试的问题,使用C ++教授(在TAU大学本学期): 问: C ++指针和引用之间? A.引用是整个对象,而指针只是它的地址。 B.同样的意思,区别只在于语法和用法。 C.用于访问对象的语法。 D.指针是对象的简单地址,而引用使用虚拟表。 这是正确的答案? 课程老师声称A正确的一个,并且对对象的引用事实上是对象本身。
..
我试图初始化一个 constexpr 引用没有成功。我尝试了 #include constexpr int& f(int& x)//可以定义返回constexpr引用的函数 { return x; } int main() { constexpr int x {20}; constexpr const int& z = x; // err
..
我最近(4天)开始学习C ++来自C / Java背景。为了学习一种新的语言,我开始重新实现不同的经典算法,因为语言的具体我可以。 我来到这个代码,它的一个DFS - 深度优先在未定向图中搜索。仍然从我读的是最好的传递参数在C ++中的引用。不幸的是,我不能完全理解参考的概念。每次我需要一个参考,我很困惑,我认为在指针。在我现在的代码中,我使用传递值。 这里的代码(可能不是Cpptho
..
all: 这是从Effective C ++第三版编辑中引用的 const_cast通常用于丢弃对象的constness 。这是唯一的C ++风格的转换可以做到这一点。 我的问题是可以const_cast添加constness到一个非const对象? 实际上我写了一个小程序试图批准我的想法。 class ConstTest { public: void test
..
阅读本文在Herb Sutter的博客上,我尝试了一下,遇到了困惑我的东西。我使用Visual C ++ 2005,但如果这是实现依赖的,我会很惊讶。 这是我的代码: #include using namespace std; struct Base { // Base(){} 〜Base(){cout
..
我使用C ++(不是C ++ 11)。我需要一个指向一个类中的函数的指针。我尝试做以下操作: void MyClass :: buttonClickedEvent(int buttonId){ //我需要对MyClass类的所有成员的访问 } void MyClass :: setEvent(){ void(* func)(int); func = buttonClic
..
我需要写一个类,它的构造函数需要一个对象的常量引用并存储在本地。 为了避免大多数常见的错误,我可以预见,我'd只接受非临时的引用(即:引用lvalue)。 如何编写一个函数, 当然,即使是非临时性的也可能超出范围,从而打破我的阶级行为,但我相信,不允许临时引用我将避免大多数错误。 解决方案 如果要存储引用并需要在构造函数已完成,可能最好的构造函数接受一个指针: s
..
假设悬挂引用 x 。是不确定的行为只是写 & x; 或甚至 code> x; ? 解决方案 什么使得无效对象(引用,指针等)的使用未定义的行为是lvalue-to-rvalue转换(§4.1): 如果glvalue引用的对象不是类型T的对象,并且不是从T派生的类型的对象,或者如果对象未初始化,则需要此转换的程序具有未定义
..
这段代码有什么问题,为什么我会得到错误的答案: class X { private: const int a; const int& b; public: X():a(10),b(20) { // std :: cout
..
我理解为与任何其他变量一样,参数的类型决定了参数与其参数之间的交互。我的问题是,什么是推理背后为什么你会引用参数vs为什么你不会?为什么有些函数参数引用而有些不是? 解决方案 通过引用传递的能力有两个原因: / p> 修改函数参数的值 为了避免出于性能原因复制对象 修改参数的示例 void get5and6(int * f,int * s)//使用指针 { * f
..
char * str =“Hello”; char * ptr = str; char *& rptr = str; ptr和rptr之间有什么区别?我理解rptr是一个指针的参考(在理论上),但它是如何与ptr实现不同的? C ++中的引用是否使用指针实现? p> 解决方案 ptr和rptr之间有什么区别? 如果你
..
当通过引用一个函数来解引用指针时会发生什么? 这是一个简单的例子 int& returnSame(int& example){return example; } int main() { int inum = 3; int * pinum =&英语 std :: cout
..
在 GMan的回答, restore_base 类的析构函数不是 virtual ,所以我一直想知道它是如何工作的。通常你会期望只有在对象超出范围之后才会执行 restorer_base 的析构函数,但看起来派生的 restorer_holder 析构函数真的被调用。 解决方案 你需要一个虚拟析构函数的标准情况是 void foo() { scoped_ptr o
..
我想通过将这样的引用作为参数传递给构造函数来初始化一个类的属性,该类拥有对另一个类的引用。但是我收到一个错误: “'TaxSquare :: bank'必须在构造函数库/成员初始化列表中初始化。 下面的类的代码有什么问题? #ifndef TAXSQUARE_H #define TAXSQUARE_H #include“Square.h” class银行; c
..