首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明指针或堆栈变量

声明指针或堆栈变量
EN

Stack Overflow用户
提问于 2015-08-28 12:29:00
回答 4查看 106关注 0票数 3

假设我们有以下情况:

  • 如果是早上心情好,否则心情不好
  • 打印心情

它可以写成:

代码语言:javascript
复制
std::string mode; //this cost us calling the constructor of std::string
if(time==Morning){ // a real code should be here
   mood="Good"//re assign the string
}
else{
   mood="bad"//re assign the string
}
std::cout << mood;

假设它不是std::string,它是一个非常大的对象。声明“模式”并无缘无故地调用构造函数不是太奢侈了吗?使用原始指针是解决方案吗?这里的最佳做法是什么?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-28 12:40:37

您可以使用三元算子初始化字符串。

代码语言:javascript
复制
std::string mode = (time == Morning ? "Good" : "Bad")

正如MSalters在注释中指出的那样,这实际上仍然是两个构造(构造函数+复制),但是编译器应该对其进行优化。直接初始化字符串。

代码语言:javascript
复制
std::string mode { (time == Morning ? "Good" : "Bad") };
票数 5
EN

Stack Overflow用户

发布于 2015-08-28 13:52:52

我会考虑将逻辑放入一个单独的函数中。这有助于保持函数的小和简单。

代码语言:javascript
复制
std::string moodAtTime(Time time)
{
    if(time==Morning)
    { // a real code should be here
        return "Good";
    }
    else
    {
        return "bad";
    }
}

std::string mood = moodAtTime(t);

这减少了函数的长度,并将代码拆分为执行简单问题的小单元。

如果它仅用于初始化,则可以使用lambda来完成此操作,而不需要指定函数:

代码语言:javascript
复制
std::string mood = [](Time t)
{
    if(t==Morning)
    { 
        return "Good";
    }
    else
    {
        return "bad";
    }
}(now);
票数 2
EN

Stack Overflow用户

发布于 2015-08-28 12:43:27

如果您输入特定范围的分配时间,成本会很高,是的,它可能会变得非常昂贵(取决于范围内发生了什么)。

解决办法是保留一个全局变量,或者更广泛地使用这样的对象池(对象池/内存池被广泛用于这类目的,特别是在小型和非常小的对象的情况下)。

所以,用代码来解释

代码语言:javascript
复制
 // scope that is entered allot, like 100k times per second
 {
   std::string temp;
   ...
   // magic happens
   ...
 }

快速解

代码语言:javascript
复制
 {
    static std::string g_uniqueNamed_temp_string;
    ...
    // magic happens
    ...
 }

优雅的解决方案

编辑:切换到原始指针以避免复制

代码语言:javascript
复制
 {
   std::string* tempString = StringPool::GetAPreallocatedString();
   ...
   // magic happens
   ...
 }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32271125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档