【问题标题】:Use of external Struct in a Class and C++ performance status?在 Class 和 C++ 性能状态下使用外部结构?
【发布时间】:2020-11-28 19:54:21
【问题描述】:

我在一个示例项目中看到了下面的代码。我对我所拥有的书籍的内容找不到满意的答案。我有几个问题。

在 struct 中的 first_name 和 last_name 变量中指定和用外部标识它们有什么区别 结构?

如果有数百万条记录,在性能方面您更喜欢哪一条?

或者有朋友分享C++技巧和义务的信息吗?

非常感谢所有花时间回答的人。

struct Name
{
         string    first_name;    // Name
         string    last_name;     // Last Name
};


class CPerson
{
        protected:
                    Name m_name;                    // Struct
        public:
                    void                SetName(string n);
                    string          GetName(){  return(m_name.first_name+" "+m_name.last_name); }
        private:
                    string          GetFirstName(string full_name);
                    string          GetLastName(string full_name);
};
void CPerson::SetName(string n)
{
            m_name.first_name           =       GetFirstName(n);
            m_name.last_name            =       GetLastName(n);
}
string CPerson::GetFirstName(string full_name)
{
            int     pos                     =       StringFind(full_name," ");
            if(pos>0)       StringSetCharacter(full_name,pos,0);
            return(full_name);
}
string CPerson::GetLastName(string full_name)
{
            string  ret_string;
            int     pos                     =       StringFind(full_name," ");
            if(pos>0) ret_string=StringSubstr(full_name,pos+1);
                    else ret_string         =       full_name;
            return(ret_string);
}

【问题讨论】:

  • 使用Name 类型的变量与使用两个单独的string 变量作为名字和姓氏之间没有性能差异。这里的结构纯粹是出于代码组织的原因,而不是出于任何性能原因。 CPerson 可以简单修改为不使用 Name
  • 完全没有性能差异。不过,在发布的代码中,存在一个明显的性能问题。您有一个 setter 将名称拆分为名字和姓氏,但您的 getter 只是将两个名称重新组合在一起。你不觉得这是在浪费精力吗?想想这种问题吧。

标签: c++ performance class struct


【解决方案1】:

没有区别,因为这个变量的使用是在编译时解决的。如果您使用 struct,则由您自己决定,如果您在某些地方同时使用 first_namelast_name,那么使用 struct 可能对您来说更容易且更具可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多