我曾在一些中型项目上使用 C++,但我从未用 C 进行过任何认真的编程。
阅读这篇文章后,我开始想知道如何在没有类和异常的情况下使用 C++11。我曾经听说过clean C这个词。Clean C应该是 C++ 代码,它不使用 ANSI C 所没有的 C++ 特性,如类或元编程。
有很多资源如何在 C 中有效地做事以及如何在 C++ 中做事。但是,要找到任何关于如何两全其美的资源是非常困难的。
我的问题分为两部分:
- 在没有命名空间、异常和元编程的情况下使用 C++ 是否有任何好的资源?书籍,开源项目?
- 请查看这段简单的代码,这是我在提到的 C++11 子集中处理数据结构和字符字符串的第一次尝试。我首先想到的是代码冗余。你会做什么不同的事情,为什么?
-
#include <cstring>
namespace addressbook {
namespace contact {
struct contact {
char* name;
char* email;
};
void initialize(addressbook::contact::contact* contact)
{
contact->name = nullptr;
contact->email = nullptr;
}
void deinitialize(addressbook::contact::contact* contact)
{
delete[] contact->name;
delete[] contact->email;
}
void set_name(addressbook::contact::contact* contact, char* name)
{
delete[] contact->name;
contact->name = new char [strlen(name) + 1];
std::strcpy(contact->name, name);
}
void set_email(addressbook::contact::contact* contact, char* email)
{
delete[] contact->email;
contact->email = new char [strlen(email) + 1];
std::strcpy(contact->email, email);
}
} // namespace contact
} // namespace addressbook
int main()
{
namespace c = addressbook::contact;
c::contact jimmy;
c::initialize(&jimmy);
c::set_name(&jimmy, const_cast<char*>("Jimmy Page"));
c::set_email(&jimmy, const_cast<char*>("jp@example.com"));
c::deinitialize(&jimmy);
return 0;
}
请怜悯我——我是一个结构化编程新手。
那为什么不只是C呢?
命名空间、新建/删除、标准库算法、boost 库、C++11 酷特性 - 仅举几例。
当您没有构造函数/析构函数时,为什么要新建/删除?
因为类型安全。malloc
返回*void
但是标准库抛出异常!而boost也是如此!
我没有使用异常这一事实并不意味着我不能处理来自外部库的异常。这只是意味着我想在我的系统部分以不同的方式管理问题。