小编Mou*_*dan的帖子

可变参数模板函数中对重载函数的不明确调用

我正在使用可变参数模板函数,其中函数参数不是模板化类型。

我遇到编译错误:

错误 C2668“_TailHelper”:对重载函数的不明确调用

这是代码片段。

template <typename HEAD>
void _TailHelper(int) {
    std::cout << typeid(HEAD).name() << std::endl;
}

template <typename HEAD, typename ... TAILS>
void _TailHelper(int x) {
    _TailHelper<HEAD>(x);
    _TailHelper<TAILS...>(x);
}


int main(){
    _TailHelper<int,double>(2);
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

在没有 {} 的情况下初始化时,C++ 指针结构崩溃

在将 C 样式结构重构为 C++ 时,我在创建没有 {} 的结构的新对象时遇到了崩溃。

我已经用以下代码片段说明了这个问题。

struct A {
    A() = default;
    int* a1;
    int* a2;
};

int main()
{
    A a{};
    std::cout << a.a1 << std::endl; //print 0000000000000000(nullptr)

    A b;
    std::cout << b.a1 << std::endl; //crash (0xcccccccccccccccc)
}
Run Code Online (Sandbox Code Playgroud)

为什么 a.a1 被初始化为 nullptr 而 b.a1 不是 nullptr?

两个构造的对象有什么不同?

我知道一个解决方案可能是:

struct A {
    A() = default;
    int* a1 = nullptr;
    int* a2 = nullptr;
};
Run Code Online (Sandbox Code Playgroud)

谢谢,

c++ c++14

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

标签 统计

c++ ×2

c++11 ×1

c++14 ×1