c++ - 根据 C++ 中的数据类型设置默认值

标签 c++ c templates

我有一个样例代码

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/

相关文章:

c++ - 寻找一个开源的 C/C++ 图像/视频缩略图生成库

LeetCode #377的C++ DP解法,这段代码有bug吗?

c++ - 从磁盘读取图像文件时出错

c++ - RTKlib(C 库)与 QT(C++ 代码)

c - 调用 glBindBuffer 后具有奇怪顶点位置的简单 openGL 应用程序

c# - EntityFramework 存储库模板 - 如何在模板类中编写 GetByID lambda?

c++ - 包含预编译 header 的错误

c++ - 为什么 pthread_exit 的行为类似于 pthread_join?

c++ - 模板特化在链接时失败

c++ - 模板方法编译错误,返回是内部类的实例