我应该利用强类型来确保编译时的正确性?

时间:2016-11-25 23:57:19

标签: c++ strong-typing

内置类型(以及来自std的类型)在任何地方都被用作函数和构造函数的参数,而不是这些类型的每个实例都是有效的输入。

示例:

// There is no guarantee that url is actually a url
void make_http_request(const std::string& url); 

// Here we know that it must be a url
void make_http_request(const url& url);

// There is no way of knowing if this is the correct mutex to lock
void insert_into_db(std::mutex mutex);

// Here we know we have the correct mutex
void insert_into_db(db_mutex mutex);

当然,这绝不应该用于您无法控制的对象的属性。例如,您可以创建一个类connected_socket,但如果对等关闭连接,则该类将成为一个谬误。但是,它可用于确保IPv4 UDP套接字永远不会尝试sendto() IPv6端点。

你做的越多,你就越能确保你的程序在编译时有效(谁不喜欢它?)。这种做法有什么问题吗?它会被认为是好的吗?有什么缺点,他们值得吗?

请原谅我,如果这是一个以另一个名字命名的概念,而我却无法找到它。

1 个答案:

答案 0 :(得分:3)

guideline中有C++ Core Guidelines关于此问题:

  

I.4:使界面精确且强烈地键入

     

原因

     

类型是最简单和最好的文档,具有明确定义的含义,并保证在编译时进行检查。此外,精确键入的代码通常会更好地进行优化。

它给出了一些例子。它并没有真正谈论过多远。