【问题标题】:Problems understanding the min and max declarations syntax in std::chrono::duration_values理解 std::chrono::duration_values 中的最小和最大声明语法的问题
【发布时间】:2021-08-14 19:16:04
【问题描述】:

我正在查看下面来自std::chrono 的代码,但我不明白_Rep(min)() 的语法。

我知道_Rep 是返回类型,min 必须是方法名,但是:

  • 写成_Rep(min)()_Rep min()有什么区别?
  • 而且,为什么 zero 不这样做?
template <class _Rep>
struct duration_values { // gets arithmetic properties of a type
    _NODISCARD static constexpr _Rep zero() noexcept {
        // get zero value
        return _Rep(0);
    }

    _NODISCARD static constexpr _Rep(min)() noexcept {
        // get smallest value
        return numeric_limits<_Rep>::lowest();
    }

    _NODISCARD static constexpr _Rep(max)() noexcept {
        // get largest value
        return (numeric_limits<_Rep>::max)();
    }
};

我在numeric_limits 中看到了相同的构造:

    _NODISCARD static constexpr _Ty(min)() noexcept {
        return _Ty();
    }
    
    _NODISCARD static constexpr _Ty(max)() noexcept {
        return _Ty();
    }

更多信息,以防万一:

  • 我正在使用 Microsoft Visual Studio Professional 2022 预览版(64 位),版本 17.0.0,预览版 1.1。
  • 我的chrono 文件位于 Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.29.30130\include 下。

还有一个我一直在玩的在线小例子:https://godbolt.org/z/E5nW7x8vW

【问题讨论】:

    标签: c++ syntax chrono


    【解决方案1】:

    它打败了宏扩展;用于定义名为 minmax 的宏的 Windows 标头。

    【讨论】:

    • @MarshalClow 啊,好的,谢谢。这完全有道理。你知道是否有人说我们可以使用&lt;RETURN TYPE&gt;(&lt;FUNCTION NAME&gt;) 作为&lt;RETURN TYPE&gt; &lt;FUNCTION_NAME&gt; 的替代语法吗?
    • 这个答案中有一个很好的例子 (stackoverflow.com/a/650711/260313),Johannes Schaub 在对该答案的评论中给出了一个很好的解释。类似函数的宏需要 ( 作为函数名称的下一个标记才能成功替换。我还不明白的是 wy RETURN TYPE(&lt;FUNCTION NAME&gt;) 是一个有效的语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2021-03-17
    • 2019-08-18
    • 1970-01-01
    • 2021-10-05
    • 2019-02-05
    相关资源
    最近更新 更多