gpt4 book ai didi

c++ - 是否有解决方法来为c++中的短裤定义用户定义的文字?

转载 作者:行者123 更新时间:2023-12-01 14:40:13 25 4
gpt4 key购买 nike

我想为短裤定义一个用户定义的文字。像这样:

short operator"" _s(int x) 
{
return (short) x;
}

为了定义这样的简短内容:
auto PositiveShort =  42_s;
auto NegativeShort = -42_s;

但是,如 this post中所述,C++ 11标准禁止上述用户定义文字的实现:

Per paragraph 13.5.8./3 of the C++11 Standard on user-defined literals: The declaration of a literal operator shall have a parameter-declaration-clause equivalent to one of the following:

const char*
unsigned long long int
long double
char
wchar_t
char16_t
char32_t
const char*, std::size_t
const wchar_t*, std::size_t
const char16_t*, std::size_t
const char32_t*, std::size_t


对于肯定的情况,我可以只使用 unsigned long long int,但这不适用于否定的情况。有没有解决方法,也许使用较新的C++ future ?

最佳答案

here所述,一元-应用于42_s的结果,因此似乎无法避免积分提升。根据应用程序,以下变通办法可能会有所用:

struct Short {    
short v;

short operator+() const {
return v;
}

short operator-() const {
return -v;
}
};

Short operator"" _s(unsigned long long x) {
return Short{static_cast<short>(x)};
}

auto PositiveShort = +42_s;
auto NegativeShort = -42_s;

static_assert(std::is_same_v<decltype(PositiveShort), short>);
static_assert(std::is_same_v<decltype(NegativeShort), short>);

关于c++ - 是否有解决方法来为c++中的短裤定义用户定义的文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59238958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com