gpt4 book ai didi

c++ - 为什么标准类不对不可复制类型使用 static_assert?

转载 作者:行者123 更新时间:2023-11-27 23:14:42 33 4
gpt4 key购买 nike

为什么 std 库不使用这些呢?目前,如果对不可复制对象的复制构造函数进行调用,则错误消息可能有点“神秘”或让以前从未遇到过的人感到困惑。

我第一次收到此错误消息时,我不知道问题出在哪里(我从未想过不可访问的 ctors 的想法),直到我查找类并看到“不可复制”并最终理解。

将复制者设为私有(private)有什么好处?对于 ctor 重载,它在 VS 智能感知中仍然可见。

为什么他们不简单地选择:

public:
someClass(const someClass&) { static_assert(false, "someClass is of non-copyable type. calls to copy constructor are disallowed."); }

如果有人试图编译他们的代码,他们将看到此错误消息,其中更明确地说明了错误的原因。与 (const someClass&) 相比是不可访问的。想象一下,如果大量使用模板,理解这一点会有多困难?

那么,私有(private)复制构造函数与 static_assert 相比有什么好处?

最佳答案

  1. 神秘消息的原因是编译器的问题,而不是 C++ 的问题,尽管对于 C++ 来说,实现好的消息确实更难。Clang 提供比其他编译器更好的错误消息,因为例子。

  2. 我不知道为什么 MS 决定在VS intellisense - 但这绝对不是 C++ 问题,而是IDE的问题(或者有一些隐藏的,对我来说是未知的)。

  3. static_assert 仅在 C++11 中受支持,并且它需要改变更多的标准规范才能改变错误信息。

  4. 私有(private)构造函数在 C++ 中比自定义 static_asserts。

  5. 这个建议甚至没有任何意义。 static_assert 将导致编译器错误。总是。是否有人尝试调用复制构造函数。 (正如@BenjaminLindley 在评论中指出的那样)

关于c++ - 为什么标准类不对不可复制类型使用 static_assert?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17204048/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com