如何使用 std::chrono::milliseconds 作为默认参数
How to use std::chrono::milliseconds as a default parameter
场景
我有一个 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
时,编译失败,我得到以下错误:
No viable conversion from 'bool' to 'std::chrono::milliseconds' (aka
'duration >')
问题:
我在这里做错了什么?我希望 Fun
的调用者在调用 Fun
时明确知道它正在使用 std::chrono::milliseconds
。但是编译器好像不允许使用std::chrono::milliseconds
作为参数?
如何使用std::chrono::milliseconds
作为默认参数?
环境
在 macOS High Sierra
上使用的编译器是 clang
修复了其他语法错误后,在 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));
}
场景
我有一个 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
时,编译失败,我得到以下错误:
No viable conversion from 'bool' to 'std::chrono::milliseconds' (aka 'duration >')
问题:
我在这里做错了什么?我希望 Fun
的调用者在调用 Fun
时明确知道它正在使用 std::chrono::milliseconds
。但是编译器好像不允许使用std::chrono::milliseconds
作为参数?
如何使用std::chrono::milliseconds
作为默认参数?
环境
在 macOS High Sierra
修复了其他语法错误后,在 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));
}