在c++中访问返回语句后,在函数中执行代码
Execution of code in a function after the return statement has been accessed in c++
我有以下功能:
Class Image {
IplImage* createImage( char* name )
{
IplImage* img = cvLoadImage( name );
return img;
...
}
}
int main() {
IplImage* newimg = createImage( "somepath" );
return 0;
}
执行createImage函数后,我想知道是否有方法在访问return语句并用img变量的内容填充newimg之后执行一些代码。
上面的代码是我想要实现的一个示例。我的主要问题是:即使在返回语句到达之后,是否有任何方法可以执行函数中的代码?
否return
指令正是这样做的,它会立即返回。之后的事情都不会被执行。
因此,如果您希望此函数执行其他操作,则必须在函数return
:之前添加这些任务的代码
IplImage* createImage( char* name )
{
IplImage* img = cvLoadImage( name );
// test if image was loaded and/or
// do whatever else you feel you need to do
// before:
return img;
}
请记住,createImage()
的功能应该很简单,并按照宣传的那样执行:创建图像。
是的,您可以创建一个本地对象,该对象将在其析构函数期间执行代码。这里有一个例子:
class X
{
X(){}
~X()
{
std::cout << "hello" << std::endl;
}
};
int a_function()
{
X x;
int a = some_calculation();
return a;
}
例如,这种技术与作用域指针一起使用。
要回答这个问题,否,在初始化newimg
之后不可能执行代码(至少不在createImage
函数中)。这是你能得到的最接近的:
struct post_return_guard{
~post_return_guard(){
// whatever you want HERE
}
};
IplImage* createImage(std::string const& name){
post_return_guard g;
IplImage* img = cvLoadImage(name.c_str());
return img;
// destructor of 'g' called, code executed.
}
C/C++中任何函数/方法的(无条件)返回语句后的每一位auf代码都是不可访问的代码,永远不会被访问/运行!
这就是您应该做的。
Class Image {
IplImage* createImage( char* name )
{
IplImage* img = cvLoadImage( name );
return img;
}
}
void doMoreStuff(){
...
}
int main() {
IplImage* newimg = createImage( "somepath" );
doMoreStuff();
return 0;
}
这并不难;只返回一个代理对象(而不是指针)其在其析构函数中执行代码。既然你在期待一个指针作为回报,代理对象也应该隐式转换为指针。
话虽如此:你为什么要这样做?你想做什么这在createImage
中是无法完成的,从你打电话的那一刻起cvLoadImage
和你回来的那一刻?
相关文章:
- 代码在main()中运行,但在函数中出现错误
- 为什么我在使用void函数时得到错误代码C2276
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 这个c++代码是如何在没有定义函数的情况下运行的
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 了解每月第一天函数的代码
- 代码的效率. 转到和函数调用
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 以下代码中的函数模板有什么问题?
- 为什么这些代码仍然使用 lvalue 函数?
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 为什么下面带有非常量转换函数的代码没有歧义?
- C++代码停止工作错误使用cout内部函数
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 如何在c++中重用代码(函数)
- 编译来自学习现代 3D 图形编程的失败代码 函数___tmainCRTStartup中引用未解析的外部符号_main
- 混合代码-函数成员指针