相关疑难解决方法(0)

为什么容器移动赋值运算符不会超出?

我注意到std::string(真的std::basic_string是)移动赋值运算符是 noexcept.这对我来说很有意义.但后来我发现,没有一个标准集装箱(例如std::vector,std::deque,std::list,std::map)宣布其移动赋值操作符noexcept.这对我来说没什么意义.std::vector例如,A 通常实现为三个指针,并且指针当然可以移动分配而不会抛出异常.然后我想也许问题是移动容器的分配器,但std::string也有分配器,所以如果这是问题,我希望它会影响std::string.

那么为什么std::string移动赋值运算符noexcept,但标准容器的移动赋值运算符不是?

c++ c++11

41
推荐指数
2
解决办法
3697
查看次数

使用默认复制构造函数的C++ vector :: push_back

我有一个类(Uniform),它有一个带有2个参数的构造函数,以及一个默认的复制构造函数(它只包含int,float,std :: vector和std :: map).我创造了一个

std::vector<Uniform> uniforms
Run Code Online (Sandbox Code Playgroud)

我想填写使用

uniforms.push_back()
Run Code Online (Sandbox Code Playgroud)

线.我使用此代码来执行此操作(第二行仅用于测试复制构造函数,因为它当前失败)

Uniform uni(uniform_name,type);
Uniform uni2=uni;
uniforms.push_back(uni2);
Run Code Online (Sandbox Code Playgroud)

默认构造函数工作正常,"uni2 = uni"编译没有问题(因此默认的复制构造函数也可以),但push_back返回(使用g ++作为编译器):

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../include/c++/4.6.0/ext/new_allocator.h:108:9:erreur :没有匹配函数调用'Uniform :: Uniform(const Uniform&)'

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../include/c++/4.6.0/ext/new_allocator.h:108:9:注意:候选人是:

./inc/uniform.h:16:5:注意:Uniform :: Uniform(std :: string,Uniform_Type)

./inc/uniform.h:16:5:注意:候选人需要2个参数,1个提供

./inc/uniform.h:14:7:注意:Uniform :: Uniform(Uniform&)

./inc/uniform.h:14:7:注意:参数1从'const Uniform'到'Uniform&'没有已知的转换

谢谢 :)

c++ copy vector copy-constructor

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

标签 统计

c++ ×2

c++11 ×1

copy ×1

copy-constructor ×1

vector ×1