【问题标题】:Is this example from a book a bad?书中的这个例子很糟糕吗?
【发布时间】:2020-07-12 18:44:32
【问题描述】:

我正在阅读由 Jones & Bartlett 出版的由 Ulla Kirch-Prinz 和 Peter Prinz 编写的C++ 编程完整指南。在其中,有一个类的示例(第 246 页),我认为这是一个主要问题——不是因为它是一个错误,而是我听说你永远不应该做的事情:

// account.h
// Defining the class Account.
// ---------------------------------------------------
#ifndef _ACCOUNT_       // Avoid multiple inclusions.
#define _ACCOUNT_

#include <iostream>
#include <string>
using namespace std;

class Account
{
    private:                // Sheltered members:
        string name;        // Account holder
        unsigned long nr;   // Account number
        double balance;     // Account balance

    public:                 //Public interface:
        bool init( const string&, unsigned long, double);
        void display();
};

#endif   //  _ACCOUNT_

include 守卫的宏以下划线开头和结尾。据我所知,下划线保留给标准库、操作系统和编译器使用,除非您正在创建操作系统或编译器,否则几乎没有理由使用它。

我知道这只是一个例子,但出于教人们良好编程习惯的意图和目的,他们似乎仍然把这个搞砸了。话虽如此,我对此还是很陌生,所以我可能是错的,这是合适的。

【问题讨论】:

  • 为什么我的问题被否决了?

标签: c++ naming-conventions


【解决方案1】:

是的,这些是保留名称,尽管您实际上不太可能遇到问题。

请注意,在这种情况下,它只是保留,因为它后跟一个大写字母。 +帐户就可以了。

是的,我同意书籍确实不应该采用这种风格。它基本上源于人们通过查看实现库头(允许使用保留名称)并思考“这就是它的完成方式”而习惯了这种风格,却没有意识到这些名称是专门使用的,因为它们是保留的。

【讨论】:

  • 是的,我知道它们不太可能引起问题,但我的意思是,这是不好的编程习惯吗?
  • @PaulSanders 在这个初学者级别使用命名空间 std 很好,要求这样的初学者定义我们的命名空间实在是太过分了......
  • @YunfeiChen 这不是我的建议。而不是using namespace std,应该在std命名空间中明确地为符号添加std::前缀,原因我提供的链接解释了。如果你不这样做,它迟早会转过来咬你。
  • 是的,您已经在定义自己的命名空间......
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
相关资源
最近更新 更多