我应该在多大程度上利用强类型来确保编译时的正确性?

How much should I leverage strong typing to ensure correctness at compile time?

内置类型(以及来自 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);

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

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

如果这是一个有别名的概念,而我只是找不到它,请原谅我。

关于这个有guideline in the C++ Core Guidelines

I.4: Make interfaces precisely and strongly typed

Reason

Types are the simplest and best documentation, have well-defined meaning, and are guaranteed to be checked at compile time. Also, precisely typed code is often optimized better.

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