是否可以围绕“sizeof expression”创建内联函数包装器,该包装器返回带符号的数字?
包装函数的外观如何?它应该与所有类型的表达式(C数组等)一起使用,因此可以是sizeof的一对一替换,但它返回带符号的数字。
因此,基本上,我想要一个ssizeof
,它返回一个带符号的数字,如下所示:
constexpr std::ptrdiff_t ssizeof(X) {
return static_cast<std::ptrdiff_t>(sizeof(X));
}
因此,例如:
long a;
int b = 8;
// no signed/unsigned comparison warning here, because
// ssizeof(a) returns a signed number
if (ssizeof(a)<b) {
}
由于自动的array-> pointer衰减规则,解决方案可能不是那么简单(也许还有其他问题?)。
如果无法进行一对一替换(因为
ssizeof
的参数将始终被评估),如果允许评估,是否可以这样做?
最佳答案
要开始使用,可以使用模板:
#include <iostream>
template <typename T>
constexpr std::ptrdiff_t ssizeof(T&& expression = {})
{
return static_cast<std::ptrdiff_t>(sizeof(T));
}
int main()
{
{
int a[10];
std::cout << "ssizeof<int>() = " << ssizeof<int>() << std::endl;
std::cout << "ssizeof<int[3]>() = " << ssizeof<int[3]>() << std::endl;
std::cout << "ssizeof<int[3]>() = " << ssizeof(a) << " / " << (sizeof a) << std::endl;
}
{
int a;
int b = 4;
std::cout << "ssizeof<int[3]>() = " << ssizeof(a) << " / " << sizeof(a) << std::endl;
}
std::cout << "Done...";
std::getchar();
return EXIT_SUCCESS;
}
关于c++ - 内联函数,它等于 “sizeof expression”,但是返回一个带符号的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47776971/