gpt4 book ai didi

c++ - 除复制省略外,还有没有其他机制可以优化C++中的过度构造?

转载 作者:行者123 更新时间:2023-12-01 14:42:14 26 4
gpt4 key购买 nike

我的函数有一个switch-case语句。有一个仅在其某些分支中使用的对象。我可以在switch-case语句之前放置此对象的初始化,并期望仅在实际使用它时才创建它。
我的意思是,这段代码在性能上有什么区别:

void someFunc( SomeEnum someEnum, Parameter parameter )
{
Object object( parameter );

switch( someEnum )
{
case SomeEnum::A:
otherFunc( object );
break;

case SomeEnum::B:
otherFunc( object );
break;

case SomeEnum::C:
anotherFunc();
break;
}
}
和这个:
void someFunc( SomeEnum someEnum, Parameter parameter )
{
switch( someEnum )
{
case SomeEnum::A: {
Object object( parameter );
otherFunc( object );
}
break;

case SomeEnum::B: {
Object object( parameter );
otherFunc( object );
}
break;

case SomeEnum::C:
anotherFunc();
break;
}
}

最佳答案

Can I put an initialization of this object before the switch-case statement and expect that it will be created only when it is actually being used.


不可以。C++标准中没有机制允许将要在文本中声明的对象仅根据运行时信息实际创建。
现在,如果 Object无关紧要,或者如果编译器可以看到 Object的构造函数/析构函数在处理该对象的状态之外没有可见的副作用,那么编译器可以在“按条件”规则下有效地转换您的第一个对象代码转换为第二个代码。但这仅仅是因为没有任何东西可以检查对象是否被创建。
请注意,“可见的副作用”包括调用内存分配函数,打开文件或其他OS级重量级 Activity 之类的事情。 IE:从性能的 Angular 来看,正是您可能会特别关注的事情。因此,如果这实际上对性能至关重要,那么编译器将无法“视情况”解决的可能性就很大。
因此,如果您明确需要延迟构造,则应该在代码中明确说明它。

关于c++ - 除复制省略外,还有没有其他机制可以优化C++中的过度构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63436383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com