我正在使用可变参数模板函数,其中函数参数不是模板化类型。
我遇到编译错误:
错误 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++ 时,我在创建没有 {} 的结构的新对象时遇到了崩溃。
我已经用以下代码片段说明了这个问题。
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)
谢谢,