从C++11开始,我们可以使用以下形式通过常量字符串构造自定义类型, 比如:
class Person { public: Person(const std::string& name): _name(name){} std::string name() const { return _name; } private: std::string name; } inline Person operator "" _psn (const char *name, size_t n) { return Person(std::string(name, n)); } int main() { auto person = "Xiao Ming"_psn; std::cout<< "The person' name is " << person.name() << std::endl; return 0; }
Output:
The person' name is Xiao Ming
在std::literals::chrono_literals的实现用,也用了类似的手段:
constexpr std::chrono::milliseconds operator "" ms(unsigned long long ms);
实现如下:
constexpr std::chrono::milliseconds operator ""ms(unsigned long long ms) { return chrono::milliseconds(ms); }
例子:
#include <iostream> #include <chrono> int main() { using namespace std::chrono_literals; auto d1 = 250ms; std::chrono::milliseconds d2 = 1s; std::cout << "250ms = " << d1.count() << " milliseconds " << "1s = " << d2.count() << " milliseconds "; }
Output:
250ms = 250 milliseconds 1s = 1000 milliseconds