C++ - 指向函数中局部变量的指针
C++ - Pointer to local variable within the function
我知道这看起来像是一个已经问了一千次的菜鸟问题。但是我搜索了确切的答案,但我还没有找到......
我正在编写一个代码,总而言之,用不同的数据填充XML。
我正在尝试优化其中的一部分。"朴素"代码如下:
xml << "<Node>";
for(auto& input : object.m_vec)
{
if(input == "Something")
{
xml << input;
}
}
xml << "</Node>";
for(auto& input : object.m_vec)
{
if(input == "SomethingElse")
{
xml << "<OtherNode>";
xml << input;
xml << "</OtherNode>";
break;
}
}
重要的是,虽然<Node></Node>
中适合多个输入,但只有一个输入适合<OtherNode></OtherNode>
(解释break;
(,并且也可能不存在(解释if
语句之间的xml <<
(。
我想我可以像这样优化它:
std::vector<std::string>* VecPointer;
xml << "<Node>";
for(auto& input : object.m_vec)
{
if(input == "Something")
{
xml << input;
}
else if(input == "SomethingElse")
{
VecPointer = &input;
}
}
xml << "</Node>";
if(!VecPointer->empty())
{
xml << "<OtherNode>"
<< *VecPointer
<< "</OtherNode>";
}
对我来说,这里的重点是不需要额外的内存,也没有额外的循环。但是指向局部变量的指针困扰着我。以初学者的眼光,我看不到可能导致错误的情况。
可以吗?为什么?你看到更好的方法了吗?
你需要确保你的compairson也在VecPointer
中寻找一个现有的值,因为你原来的第二个循环只关心它遇到的第一个值。
else if(VecPointer && input == "SomethingElse")
不要寻找->empty()
,因为这是访问指针并询问指向的向量是否为空。如果一开始没有什么可指出的,那么你在陈述->
阶段会过得很糟糕。相反,如果反对它,因为它是一个指针。
if(VecPointer)
最后,您使用 Vector 从 m_vec 中保存该值,我假设它不是vector<vector<string>>
而是vector<string>
- 在后一种情况下,您的VecPointer
应该std::string*
std::string* VecPointer = nullptr;
我正在尝试优化其中的一部分。
...
可以吗?
也许不是!这可能已经是对你时间的不良利用。你确定这就是损害你表现的原因吗?或者根本存在性能问题?
记住Don Knuth的一句老话:过早的优化是万恶之源......
你看到更好的方法了吗?
考虑分析程序以查看哪些部分实际占用的时间最多。
在不相关的说明中,您可以使用标准库算法来简化(未优化的(代码。例如:
if (std::ranges::find(std::begin(object.m_vec) std::end(object.m_vec), "SomethingElse"s )
!= std::end(object.m_vec))
{
xml << "<OtherNode>" << whatever << "</OtherNode>";
}
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- C++ - 指向函数中局部变量的指针
- 指针 与局部变量的关系
- 指针被分配给错误的局部变量
- 通过静态局部变量的参考/指针返回
- 使用局部静态std :: ARNE_FLAG和局部静态指针对静态变量的线程安全初始化
- 指针或局部变量,用于函数的输出参数
- 通过指针修改子函数中函数的局部变量的内容
- 局部变量与指针性能
- 为什么由指针和对象构建的局部变量显示不同的输出
- 返回局部变量C++的指针
- 为什么我们使用指针而不是局部变量
- 指向C++中局部变量的指针
- 指针可以将局部变量的内存指向其范围之外?
- 列表、指针和局部变量
- 我如何使一个函数指针引用一个局部变量
- 类局部变量的指针
- 函数中指向局部变量的全局指针
- 如何在g++中设置警告,以警告返回指向局部变量的指针