小编lig*_*ulb的帖子

`typename = enable_if_t<...>` 和 `enable_if_t<...,bool> = true` 之间的区别

使用typename = enable_if_t<...>enable_if_t<...,bool> = true用于 SFINAE之间有什么区别吗?我特别问,因为我偶然发现了一个错误:编译器错误,在 enable_if_t 中有一个折叠表达式

所以我很好奇两者之间是否有任何实际差异。

c++ templates enable-if

1
推荐指数
1
解决办法
144
查看次数

在构造函数中复制静态数组

是否有一个编译时表达式可以在对象构造函数中复制数组?默认构造函数使用什么?我想要这样的东西:

struct A
{
    int arr[100];
    // I want something like this:
    A(const A& arg) : arr{arg.arr...} {}
    // what I use at the moment (a compile time loop):
    A(const A& arg)
    {
        static_for<0, N>([&](auto i) { arr[i] = arg.arr[i]; });
    }
};
Run Code Online (Sandbox Code Playgroud)

我不想使用std::array,并且复制ctor中有一些调试信息,因此我不能依赖默认值。

c++ arrays copy-constructor

1
推荐指数
1
解决办法
46
查看次数

评估参数包

这是不使用折叠来评估参数包的唯一方法(因为它需要使用运算符)吗?

#include <iostream>

template<int ...Is, typename Function>
void eval(Function&& f)
{
    // (f(Is)...);
    auto op = [&f](int i){f(i); return 0;};
    auto doNothing = [](auto...){};
    doNothing(op(Is)...);
}

int main()
{
    eval<0,1,2>([](int x){std::cout << x << "\n";});
}
Run Code Online (Sandbox Code Playgroud)

本质上,我想这样做(f(Is)...),但是由于某些原因,这在C ++中是不允许的。是否有比使用上述解决方法更优雅的方法?

c++ templates variadic-templates fold-expression c++17

1
推荐指数
1
解决办法
64
查看次数

const char*to int cast?

我想以下片段的行为应该是未定义的,但我只是想确保我理解正确的事情.假设我们有这个代码:

#include <iostream>

int main()
{
  std::cout << "mamut" - 8 << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,我认为这样做是(字符*)((INT)(为const char*) - (INT)),但在此之后的输出是非常奇怪的,不是我期望它做任何真正意义上的.所以我的问题是关于char*和int之间的转换 - 它是未定义的,还是背后有一些逻辑?

编辑:我只想补充一点:

#include <iostream>

int main ()
{
    const char* a = "mamut";
    int b = int(a);
    std::cout << b << std::endl;
    std::cout << &a <<std::endl;
    // seems b!= &a
    for( int i = 0; i<100;i++)
    {
        std::cout<<(const char*)((int)a - i)<<std::endl;
    }

    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

在我变得足够大之后的输出给了我像_Jv_RegisterClasses等的东西.仅仅为了记录:

std::cout << a - i << std::endl;
Run Code Online (Sandbox Code Playgroud)

产生与以下相同的结果:

std::cout<<(const char*)((int)a - i)<<std::endl;
Run Code Online (Sandbox Code Playgroud)

c++ int casting char

0
推荐指数
1
解决办法
1430
查看次数

std::map::operator[] 行为异常

我不知道我做错了什么,但我有一张地图:

std::map<std::pair<ID, ID>, std::queue<Datum>> readQueues;
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到我打电话readQueues[std::make_pair(src, dst)];,然后我得到一个错误,我的参数与函数的参数不匹配。有趣的是,整个事情的作品与std::map::findmap::at使用完全相同的参数...任何想法?

c++ stl map

0
推荐指数
1
解决办法
78
查看次数

腐烂至基层

是否有一个特征返回特定类的基类,并假定不涉及多重继承?基本上像这样:

struct Base
{

};

struct Derived : public Base
{

};

struct DerivedDerived : public Derived
{

};

static_assert(std::is_same_v<base<DerivedDerived>::type,Derived>);
static_assert(std::is_same_v<base<Derived>::type,Base>);
static_assert(std::is_same_v<base<Base>::type,Base>);
// with levels
static_assert(std::is_same_v<base<0,DerivedDerived>::type,Base>);
static_assert(std::is_same_v<base<1,DerivedDerived>::type,Derived>);
static_assert(std::is_same_v<base<2,DerivedDerived>::type,DerivedDerived>);
static_assert(std::is_same_v<base<0,Derived>::type,Base>);
static_assert(std::is_same_v<base<1,Derived>::type,Derived>);
Run Code Online (Sandbox Code Playgroud)

c++ templates type-traits c++17

0
推荐指数
1
解决办法
45
查看次数