我有一个样例代码
template <typename BIT_LENGTH>
class mod {
public:
mod(BIT_LENGTH val) : m_val (powl(2,sizeof(BIT_LENGTH) * 8) - 1), _val(val) {
}
void value() {
std::cout << " sizeof -- " << sizeof(BIT_LENGTH) << std::endl;
std::cout << " value is : ---- " << m_val << std::endl;
std::cout << " value is : ---- " << _val << std::endl;
}
private:
BIT_LENGTH m_val;
BIT_LENGTH _val;
};
int main(){
mod<uint64_t> mod1(10);
mod1.value();
}
现在我想将我的成员变量初始化为模板化类型的最大值。
最好的方法是什么?
还有什么比使用 powl 函数更干净的吗?
最佳答案
查看 std::numeric_limits
.
<德尔> powl
不是标准的 C++ 函数:它来自 Linux。 哦,它在 C99 中。那好吧!在 C++ 中,基本上可以使用相同的函数,只是名称为 pow
。 ,重载(奇怪的是 powl
在 C++11 标准中没有提到)。
顺便说一句,您可以(从统计上)通过为宏名称保留全部大写来避免烦人的意外文本替换。它也更容易在眼睛上。一般而言。
此外,以防万一您不知道,在 C 和 C++ 中,不能保证一个字节是 8 位。在某些平台上,特别是某些德州仪器数字信号处理器,一个字节(例如 char
)是 16 位。从历史上看,它也有其他尺寸。它必须至少 8 位,仅此而已。每字节的位数可用 CHAR_BIT
表示。来自 <limits.h>
.
最后,如果您始终使用系统的缩进,您会发现您对代码的理解会好得多。
而且其他人也会更容易理解代码。
几乎神奇的是,这大大减少了您必须花时间寻找和纠正的错误数量。
关于c++ - 根据 C++ 中的数据类型设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14973739/