如果我正确地解释C++引用,它们就像指针一样,但保证数据完整性(没有NULL,没有(int*)0x12345).但是当引用对象的范围被遗漏时会发生什么?如果没有涉及魔法(可能不是),引用的对象将在我背后被摧毁.
我写了一段代码来检查:
#include <iostream>
using namespace std;
class A {
public:
A(int k) { _k = k; };
int get() { return _k; };
int _k;
};
class B {
public:
B(A& a) : _a(a) {}
void b() { cout << _a.get(); }
A& _a;
};
B* f() {
A a(10);
return new B(a);
}
int main() {
f()->b();
}
Run Code Online (Sandbox Code Playgroud)
该_k实例变量放入检查堆栈帧的存在.
令人惊讶的是,它不是段错误而是正确地打印'10',而我认为它A是在堆栈上分配的,并且堆栈帧f()将被至少cout<<调用覆盖.
嘿家伙我有关于变量和If语句的问题.
我问的原因是我在变量的字符串向量中分配标记,但如果我的向量只有3个元素,我尝试将变量赋给myVector(5)我得到一个错误.
这是我解决这个问题的方法
std::string element5;
if(myVector.size () >= 4)
(
std::string element5 = myVector.at(4)
}
Run Code Online (Sandbox Code Playgroud)
但那不会改变if语句之外的字符串吗?如果我有5个元素并且没有错误检查我的代码工作正常但是如果我传入标准输入我真的不知道有多少元素我将知道最多有50个元素.
我不需要输出任何元素只需在每个元素上运行此代码
if(countSubstring(element5,"a") > 0)
{
a = a + 1
}
Run Code Online (Sandbox Code Playgroud)
然后我会输出一个.
如何让element5保持其新字符串?