草庐IT

缺一不可

全部标签

C++ 在 Vector 中使用不可赋值的对象

我想在std::vector中存储一个对象列表,但是这些对象包含一个引用并且不能被分配给。但是,我可以复制构造对象。我能想到的唯一选择是使用指针来包装对象并在需要分配时重新设置指针,但这样做的语法会大大降低可读性,尤其是在使用迭代器时,我更喜欢替代方法.不起作用:std::vectormyVector;//fillthevector//...myVector[1]=object1;智能指针牺牲了可读性:std::vector>ptrVector;//fillthevector//...ptrVector[1]=std::unique_ptr(newMyObject(object1));

c++ - 为什么 std::pair 不可构造?

以下代码:#include#include#include#includeusingnamespacestd;structFoo{std::strings;inti;};intmain(){cout::value>::value::value>::value使用g++-std=c++11编译时产生以下输出:truefalsetruetrue为什么是std::pair不能抛出构造,而Foo是,为什么它不可构造? 最佳答案 有趣的是,noneoftheconstructorsisdeclarednoexceptunderanycondi

c++ - Google Sparsehash 在不可平凡复制的类型上使用 realloc()

考虑这个简单的程序:#include#includeintmain(){google::dense_hash_mapmap;map["foo"]=0;}使用GCC8.2和-Wclass-memaccess(或-Wall)编译会产生警告:sparsehash/internal/libc_allocator_with_realloc.h:68:40:warning:‘void*realloc(void*,size_t)’movinganobjectofnon-triviallycopyabletype‘structstd::pair,int>’;use‘new’and‘delete’ins

c++ - 你能让一个类的方法不可继承吗?

我有一个我自己使用的几何对象的基类,但我也想将该类继承到另一个对象的高级版本中,因为它们共享很多逻辑。基础对象有几个静态创建方法(由于参数冲突不能使用new),我不想继承那些。我能以某种方式指定那些不被继承吗?编辑:包括一个例子structBanana{floatlength;Banana(){}Banana(floatlength){this->length=length;}staticBananaCreateByHalfLength(floathalfLength){returnBanana(halfLength*2);}};structAdvancedBanana:Banana{

c++ - 不可移动对象数组的初始化 : why does such code fail to compile on GCC?

这是代码示例,其中Test是一个不可复制的和不可移动的类,带有一些virtual成员和用户定义的构造函数,以及B是一个包含Test的原始(C风格)数组的类对象:classTest{public:Test()=delete;Test(constTest&)=delete;Test(Test&&)=delete;Test&operator=(constTest&)=delete;Test&operator=(Test&&)=delete;Test(inta,intb):a_(a),b_(b){}virtual~Test(){}inta_;intb_;};//----------------

c++ - 如何初始化一系列不可移动、不可复制的对象?

假设我有一个既不可移动也不可复制的类型:structfoo{explicitfoo(size_t){}~foo(){}foo(fooconst&)=delete;foo(foo&&)=delete;foo&operator=(fooconst&)=delete;foo&operator=(foo&)=delete;};现在给定一个在编译时已知的数字(称为N),有什么方法可以在堆栈上创建这些数字的“序列”,每个数字都用数字0到N-1初始化?我会对C风格的数组感到满意foo[N],一个std::array,甚至可能是std::tuple某种形式。我要避免的是写出:foof0(0),f1(1

c++ - 为什么这个模板参数不可推导?

编辑:我在使用SFINAE时犯了一个简单的错误。修复解决了我在下面提到的编译器错误。但是,我仍然很好奇为什么在这种情况下无法推导模板参数。我想编写一个C++14模板元程序来计算std::integer_sequence的最大公约数(GCD).经过一番修改后,我想出了这个几乎完整的例子:templatestructGCD>:GCD::value,Ints...>>{};templatestructGCD>:GCD_pair{};intmain(){usingseq=std::integer_sequence;cout::value我只是剥离整数序列的前两个元素,并使用待写的GCD_pai

c++ - 自动生成的 move 构造函数,成员不可 move

我遇到了一个非常有趣的情况,因为我正在处理的代码可以编译,尽管我很惊讶它会编译,所以我想请你谈谈。情况是这样的。我有一个带有删除的move和复制构造函数的类,它具有用户定义的赋值运算符:structA{A(){}A(constA&)=delete;A(A&&)=delete;A&operator=(constA&){return*this;}A&operator=(A&&){return*this;}};我还有另一个类,A是唯一的成员。在这个类中,我定义了复制构造函数,但我将move构造函数保留为默认值,并通过调用交换函数定义了赋值运算符:classB{public:Aa;B():a{

c++ - 模板参数类型被编译器视为完整的,但其定义尚不可见

假设我有以下代码片段:templateclassBar{//static_assert(sizeof(T)>0);//(1)public:voidmethod(){static_assert(sizeof(T)>0);//(2)}};classFoo;//(3)templateclassBar;//(4)classFoo{};//(5)如果我们取消注释行(1),我们会得到一个编译时错误“incompletetypeT”,看起来很清楚:classBar实例化由(4)启动,并且那时classFoo仅由(3)向前声明,尚未由(5)定义。但是如果第(1)行被注释掉,那么这段代码编译没有错误,这

ios - [Firebase/Core][I-COR000022] Firebase 分析不可用

[Firebase/Core][I-COR000022]FirebaseAnalytics不可用。为什么会这样?我做了什么......我手动将FirebaseSDK安装到我的iOS项目中我在其他链接标志中添加了-ObjC还有什么事要做吗? 最佳答案 在不使用CocoaPods的情况下集成firebase框架时会发生这种情况。确保正确设置-ObjC链接器标志。您还可以检查FirebaseAnalyticsnotavailable 关于ios-[Firebase/Core][I-COR000