嘿家伙我有关于变量和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保持其新字符串?
您的代码重新定义了您的变量element5:
std::string element5;
if(myVector.size () >= 4)
(
std::string element5 = myVector.at(4)
}
Run Code Online (Sandbox Code Playgroud)
在这里,您首先element5在第一行之后声明,然后在if语句的第三行重新声明它.这实质上是"重新创建"该element5范围的变量{}.然后当然是pop在范围之后编辑.因此,element5如果您尝试将其打印出范围,则不会看到更改.
很容易,只是不要重新声明你的变量,你已经完成了!像这样:
std::string element5;
if(myVector.size () >= 4)
(
element5 = myVector.at(4)
}
Run Code Online (Sandbox Code Playgroud)
就像我说的那样,在汇编级别下变量被push编辑,然后突然变为另一个级别并且相同的变量被重新声明,全局变量被遗忘.一旦范围结束:
{
//This is a scope
}
Run Code Online (Sandbox Code Playgroud)
重新声明的变量pop从堆栈中删除,我们原来element5回来了!这将留element5在相同的位置,因为你实际上没有改变它;).
不要引用超出范围的对象; 不要这样做!
当我通过引用传递一个对象并且它超出范围时,在C++中会发生什么?
范围:程序当前正在执行的"容器"; 例如,让我们来看看:
int main() {
//1st scope
if (true) {
//2nd scope
{
//third scope
}
}
}
Run Code Online (Sandbox Code Playgroud)
未定义的行为(UB):在编译期间的任何时间处于 未定义/未知状态.编译器做它决定做的任何事情,使它成为一个非常危险的行为,特别是如果你正在编写一个大项目!这是一个很好的问题/答案:
https://softwareengineering.stackexchange.com/questions/99692/philosophy-behind-undefined-behavior
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |