【发布时间】: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