答案 0 :(得分:11)
s
中的std::this_thread::sleep_for(2s)
是什么?
s
是用户定义的文字,使2s
成为类型为chrono::second
的文字值。
您可能熟悉integer literals和floating literals;这些是内置的后缀:
+--------+---------+---------------+
| Suffix | Example | Type |
+--------+---------+---------------+
| U | 42U | unsigned int |
| LL | 1LL | long long int |
| f | 3.14f | float |
+--------+---------+---------------+
它们使您可以提供其类型符合您需要的文字值。例如:
int half(int n) { return n/2; }
float half(float f) { return f/2; }
half(3); // calls the int version, returns 1 (int)
half(3.f); // calls the float version, returns 1.5f (float)
C ++ 11添加了一个新功能:user-defined literal后缀:
通过定义用户定义的后缀,允许整数,浮点数,字符和字符串文字产生用户定义类型的对象。
它们允许提供用户定义类型或标准库定义类型的文字。定义文字就像定义operator""
一样容易:
// 0_<suffix> is now a <type> literal
<type> operator "" _<suffix>(unsigned long long); // ull: one of the height existing forms
#include <iostream>
class Mass
{
double _value_in_kg;
public:
Mass(long double kg) : _value_in_kg(kg) {}
friend Mass operator+ (Mass const& m1, Mass const& m2) { return m1._value_in_kg + m2._value_in_kg; }
friend std::ostream& operator<<(std::ostream& os, Mass const& m) { return os << m._value_in_kg << " kg"; }
};
Mass operator "" _kg(long double kg) { return Mass{kg}; }
Mass operator "" _lb(long double lb) { return Mass{lb/2.20462}; }
int main()
{
std::cout << 3.0_kg + 8.0_lb << '\n';
}
Outputs "6.62874 kg" (demo)为it should。
std::chrono
与“真实”的用户提供的文字不同,标准库提供的文字不以下划线(_
)开头。 s
是其中之一,并且在<chrono>
中定义(自C ++ 14起):
constexpr chrono::seconds operator "" s(unsigned long long secs);
使用其他持续时间文字,它可以使您写得像这样漂亮:
#include <chrono>
using namespace std::chrono_literals;
const auto world_marathon_record_2018 = 2h + 1min + 39s;
答案 1 :(得分:3)
“ s”代表第二个,实际上是标准库中定义的文字运算符。文字是C ++ 14标准的一部分。您可以通过using namespace std::chrono_literals;
答案 2 :(得分:-1)
s实际上是标准库中定义的chrono库函数