【发布时间】:2013-08-20 06:10:04
【问题描述】:
我正在学习 C++11,并且对用户定义的文字很感兴趣。 所以我决定玩一下它。 有些语言有这样的语法:
int n = 1000_000_000;
我尝试在 C++11 中模拟此功能。
inline constexpr unsigned long long operator "" _000 (unsigned long long n)noexcept
{
return n * 1000;
}
inline constexpr unsigned long long operator "" _000_000 (unsigned long long n)noexcept
{
return n * 1000*1000;
}
inline constexpr unsigned long long operator "" _000_000_000 (unsigned long long n)noexcept
{
return n * 1000*1000*1000;
}
int main(){
constexpr auto i = 100_000; // instead of 100000
constexpr auto j = 23_000_000; // instead of 23000000;
}
但是对于一般情况我无法模拟它,即
自动general_case = 123_456_789; //无法编译
我的问题是“我可以使用 C++11 模拟上述一般情况吗?”。
【问题讨论】:
-
对 1_000_000 有效吗?我个人会使用自定义用户文字和字母 K M G(千兆千兆)。
-
1_000_000 编译!!!
-
@ddriver 唯一的问题是你不能那么准确
-
为什么不呢,你可以选择 1_234 或者 1.234K 来舍入到相同的整数? @KhurshidNormuradov - 你只为 _000 定义了它,如果你想要更多的“精确度”,你需要将
_作为一个独立的后缀,它需要在右边使用另一个参数,但我不知道这是否是可能。 -
这个确切的功能几乎使它进入了 C++14。预计它将在 2015 年左右进入编译器,并在 2017 年左右正式标准化。open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3661.html
标签: c++ c++11 user-defined-literals