简体   繁体   English

“错误:在转换的常量表达式中不允许从'double'转换为'std::size_t'(又名'unsigned long')”是什么意思?

[英]what does “ error: conversion from 'double' to 'std::size_t' (aka 'unsigned long') is not allowed in a converted constant expression” mean?

#define Tag std::bitset<32-8-log2(4*_N)>
#define Offset std::bitset<log2(4*_N)>

I tried to write a code in cpp with the following #define functions and i ended up with the error.我尝试使用以下 #define 函数在 cpp 中编写代码,但最终出现错误。

error: conversion from 'double' to 'std::size_t' (aka 'unsigned long') is not allowed in a converted constant expression
Tag* _tagBits;

You could define your own constexpr (naive) log2:您可以定义自己的constexpr (naive) log2:

#include <iostream>
#include <bitset>

constexpr std::size_t log2(std::size_t N)
{
    return N <= 1 ? 0 : 1+log2(N/2);
}

int main()
{
    std::bitset<1+log2(13)> b;
    std::cout << b << '\n'; // 0000
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从std :: size_t *到long unsigned int的转换无效* - Invalid conversion from std::size_t* to long unsigned int* 如何解决隐式转换丢失整数精度:&#39;size_t&#39;(又名&#39;unsigned long&#39;)到&#39;int&#39;警告? - How to solve the Implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' warning? iOS-隐式转换将整数精度&#39;size_t&#39;(aka&#39;unsigned long&#39;)转换为&#39;int&#39; - iOS - implicit conversion loses integer precision 'size_t' (aka 'unsigned long') to 'int' 错误:从&#39;void *&#39;到&#39;test :: apr_size_t * {aka long unsigned int *}&#39;的无效转换&#39;[-fpermissive] - error: invalid conversion from ‘void*’ to ‘test::apr_size_t* {aka long unsigned int*}’ [-fpermissive] 如何 std::variant<unsigned long, size_t, unsigned int></unsigned> - how to std::variant<unsigned long, size_t, unsigned int> xcode 构建失败 隐式转换丢失 integer 精度:“size_t”(又名“unsigned long”)到“socklen_t”(又名“unsigned int”) - xcode build failing over Implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'socklen_t' (aka 'unsigned int') 将size_t除以unsigned long并将结果赋值为double - Divide an unsigned long for a size_t and assign the result to a double C++ 错误:'operator[]' 不匹配(操作数类型为 'const my_array_over' 和 'size_t' {aka 'long unsigned int'}) - C++ error: no match for 'operator[]' (operand types are 'const my_array_over' and 'size_t' {aka 'long unsigned int'}) 从(long)double转换为size_t - Casting from (long)double to size_t 用unsigned long替换size_t有什么缺点 - What is the downside of replacing size_t with unsigned long
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM