谁能帮我解决以下问题?
有一个简单的代码:
#include <vector>
struct A {
std::vector<int> vec;
};
void func (A &&a = {}) {}
int main()
{
func();
return 0;
}
当我尝试通过 gcc 5.4.0 编译它时,我得到了错误:
undefined reference to `std::vector<int, std::allocator<int> >::vector()'
很神奇,但是 clang 编译得很好。 另外,如果稍微修改一下代码,编译时没有任何问题:
#include <vector>
struct A {
std::vector<int> vec;
};
void func (A &&a) {}
int main()
{
func({});
return 0;
}
我真的不明白第一个代码有什么问题。
最佳答案
这是 gcc bug .也可以用
复制template<typename Value>
struct A
{
A() = default;
std::vector<Value> m_content;
};
void func(A<int> a = {})
{
}
int main()
{
func();
}
不过,目前还没有任何状态。
我似乎缺少 vector 的实际实例导致编译器没有为它删除代码,从而导致 undefined reference 。
关于c++ - 列表初始化函数参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44588166/