【问题标题】:How to use std::chrono::milliseconds as a default parameter如何使用 std::chrono::milliseconds 作为默认参数
【发布时间】:2019-11-06 12:55:24
【问题描述】:

场景
我有一个 C++ 函数,它接收一个参数为std::chrono::milliseconds。它基本上是一个超时值。而且,它是一个默认参数,默认设置为某个值。

代码

#include <iostream>
#include <chrono>

void Fun(const std::chrono::milliseconds someTimeout = std::chrono::milliseconds(100)) {
    if (someTimeout > 0) {
        std::cout << "someNumberInMillis is: " << someNumberInMillis.count() << std::endl;
    }
}

int main() {
    unsigned int someValue = 500;
    Fun(std::chrono::milliseconds(someValue))
}

问题
以上都可以,但是当我用一个值调用Fun 时编译失败,我得到以下错误:

没有从 'bool' 到 'std::chrono::milliseconds' 的可行转换(又名 '持续时间>')

问题:
我在这里做错了什么?我希望Fun 的调用者在调用Fun 时明确知道它正在使用std::chrono::milliseconds。但是编译器好像不允许使用std::chrono::milliseconds作为参数?

如何使用std::chrono::milliseconds作为默认参数?

环境
使用的编译器是 macOS High Sierra 上的 clang

【问题讨论】:

  • if (someTimeout &gt; 0)?我的编译器找不到匹配的重载。 someNumberInMillis 来自哪里?当我修复这些和其他明显的语法错误时,在 GCC9 上编译对我来说很好。
  • 我更新了代码。请再检查一次。我正在改进变量名称:-D
  • 用 gcc 编译??惊人的!我在 macOS 上使用 clang 作为编译器。我更新了问题的环境详细信息
  • 正如我所说,我必须修复一些语法错误,即不一致的名称、与整数比较和缺少分号。您能否更新到除了我们感兴趣的错误之外没有任何错误的minimal reproducible example?谢谢!

标签: c++11 chrono milliseconds


【解决方案1】:

修复其他语法错误后,在 GCC 9 中编译时不会出现警告:

#include <iostream>
#include <chrono>

void Fun(const std::chrono::milliseconds someNumberInMillis
                                         = std::chrono::milliseconds(100))
{
    if (someNumberInMillis > std::chrono::milliseconds{0}) {
        std::cout << "someNumberInMillis is: " << someNumberInMillis.count()
                  << std::endl;
    }
}

int main()
{
    unsigned int someValue = 500;
    Fun(std::chrono::milliseconds(someValue));
}

【讨论】:

  • 非常抱歉。我接受。我是另一个错误:-(。这个问题对于想要知道如何使用计时类型作为参数的新手来说仍然很有用。谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多