gpt4 book ai didi

c++ - 何时包含内置类型和运算符的 header ?

转载 作者:行者123 更新时间:2023-12-02 09:56:41 25 4
gpt4 key购买 nike

什么时候应该包含内置类型的 header ?

  • <new>对于 new (似乎确实需要复杂的重载);它可以被使用。
  • (编辑:错误的例子(见答案))<typeinfo>对于 std::type_info ;它可以通过使用typeid获得接线员
  • (编辑:错误的例子(见答案))<initializer_list>对于 std::initizlizer_list ;这只是 auto l = {1, 2, 3}; 的结果或临时在 for (int i : {1, 2, 3}) {}
  • <cstddef>/<cstdio>/<cstring>/<ctime>对于 std::size_t ;它可以作为运算符 sizeof val 的结果给出或 sizeof(Type)
  • <cstddef>对于 std::nullptr_t ; decltype(nullptr)
  • <cstddef>对于 std::ptrdiff_t ; decltype(std::declval<int *>() - std::declval<int *>())
  • <tuple>对于结构化绑定(bind)的某些功能
  • 也许其他人

  • 是否存在强制包含相应标题的情况?

    最佳答案

    严格来说,并非所有示例的行为都符合您的预期。例如

    [expr.typeid]

    6 If the header <typeinfo> is not included prior to a use of typeid, the program is ill-formed.

    [dcl.init.list]

    2 ... The template std​::​initializer_­list is not predefined; if the header <initializer_­list> is not included prior to a use of std​::​initializer_­list — even an implicit use in which the type is not named — the program is ill-formed.



    所以有两个例子。当然,您可以在不包含某些标题的情况下通过,例如
    using size_t    = decltype(sizeof(0));
    using nullptr_t = decltype(nullptr);

    但总的来说,完全确定我们得到定义明确的结果的方法是为标准类型包含正确的 header 。

    关于c++ - 何时包含内置类型和运算符的 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59527549/

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