草庐IT

virtual-copy

全部标签

c++ - 严格的别名规则和 std::copy

我有一个字符数组,其中包含我需要解释为“int”的“序列化”数据。以前我只是将指向位置的指针转换到“int*”并取消引用以获取int数据,但尽管它对我来说效果很好,但它打破了严格的别名规则,因此出现了未定义的行为。所以现在我使用memcpy将字节复制到一个int中,我相信这不是未定义的行为。但是我可以使用“std::copy”吗?例如chardata[10]={0,1,2,3,4,5,6,7,8,9};inti;std::copy(data,data+sizeof(int),reinterpret_cast(&i));这本身并没有违反严格的别名规则,但任何可能的实现都会这样做.....

c++ - 警告 : base class ‘A’ should be explicitly initialized in the copy constructor

我有以下类结构:classA{A(){}A(constA&src){}};classB:virtualA{B():A(){}B(constB&src):A(src){}};classC:virtualA{C():A(){}C(constC&src):A(src){}};classD:virtualB,virtualC{D():B(),C(){}D(constD&src):B(src),C(src){}};这给了我警告:Incopyconstructor‘D’:warning:baseclass‘A’shouldbeexplicitlyinitializedinthecopyconstr

c++ - 为什么 std::copy 不向量化?

考虑这个通用代码:#include#include#include//std::copyintmain(){constintn=1024;floata1[n],a2[n];std::srand(std::time(0));for(inti=0;i当我在Ubuntu上使用g++/gcc4.8.1和-O3-march=native-mtune=native标志编译时,我得到对应的行无法对拷贝进行矢量化,因为:note:notvectorized:notenoughdata-refsinbasicblock.如果我用for(inti=0;i我也收到了相同的编译器消息。我有点不解。直觉上我会想

c++ - 使用 protected 非虚拟析构函数时抑制 delete-non-virtual-dtor 警告

我有一个纯抽象接口(interface)类和一个实现该接口(interface)的派生类。structFoo{virtualvoiddoStuff()=0;};structBar:Foo{voiddoStuff()override{}};我的接口(interface)类没有虚拟析构函数。因此,尝试使用基类指针破坏派生实例显然是未定义的行为intmain(){Foo*f=newBar;f->doStuff();deletef;}幸运的是我的编译器足够聪明,可以捕捉到这个(使用-Werror)main.cc:15:9:error:deletingobjectofabstractclasst

c++ - 使用 std::copy 复制 std::list 并使用 std::list::erase 删除

在为示例列表分配数字后的波纹管示例代码中,我试图用std::copy复制容器,但问题是在运行时它说“无法取消引用结束列表迭代器”.我的问题是如何复制列表以便将复制的范围插入到列表的末尾?到最后因为我以后需要能够删除重复的范围,这就是我将新范围的开头保存到迭代器的原因。#include#include#includevoidprint(std::list&ref){for(auto&num:ref){std::coutmylist{1,2,3,4};std::list::iteratoriter=mylist.end();std::cout 最佳答案

c++ - 如何解决 : undefined reference to `non-virtual thunk to ...`

我正在尝试弄清楚如何进一步解决此问题。我还想知道如何安装更新版本的ld(如果有意义的话)。所有涉及的包管理器都告诉我,我是最新的。代码在ubuntu12.04和12.10上使用g++(4.7.2)编译、链接和运行,但在FC17上编译失败并出现此错误。ArchiveServiceLib/debug-posix/libArchiveLib.a(NamedIflTiffCache.o):(.rodata._ZTV26UnlockingGenericFileHandle[_ZTV26UnlockingGenericFileHandle]+0x58):undefinedreferenceto`I

C++ : noexcept (or throw()) virtual destructor = default;

下面的代码是合法的吗?classC{virtual~C()noexcept=default;};或classC{virtual~C()throw()=default;};(throw()已弃用,但我的编译器不支持noexcept;;) 最佳答案 8.4.2[dcl.fct.def.default]Anexplicitly-defaultedfunction[...]mayhaveanexplicitexception-specificationonlyifitiscompatible(15.4)withtheexception-spe

C++ 11 : Mutex & Condition Variable Cannot be Copied

我是C++11的新手,正在使用线程。我遇到了一个无法复制互斥锁和条件变量对象的场景。代码是这样的....classproducer{public:producer(mutexm,condition_variablecv){mut=m;//ERRORcvar=cv;//ERROR}private:mutexmut;condition_variablecvar;}尝试在构造函数中复制变量时出现错误。似乎复制构造函数设置为deleteformutex和cv。有办法克服吗?我想要一个生产者和消费者类,然后从ma​​in函数传递互斥量和cv。所以基本上来自main函数的调用应该是这样的.....

c++ - msvc is_copy_assignable 始终为真?

#includeclassTest{public:Test(constTest&)=delete;Test&operator=(constTest&)=delete;};voidfn(Test&a,constTest&b){a=b;}static_assert(!std::is_copy_assignable::value,"Testshouldn'tbeassignable");在MSVC2013Update3下编译此代码时static_assert意外失败,并且函数fn编译失败(如预期)。这很矛盾,对吧?我是否滥用了is_copy_assignable?有没有其他方法可以测试这种情

c++ - 通常方法上的 Woverloaded-virtual 警告

我很困惑为什么下面的代码会产生Woverloaded-virtual警告。classTestVirtual{public:TestVirtual();virtualvoidTestMethod(inti);};classDerivedTestVirtual:publicTestVirtual{public:voidTestMethod();};派生类具有不带参数的常用方法TestMethod-签名不同于基类的类似虚拟方法。那为什么编译器不能解决这种情况呢? 最佳答案 警告的原因是无参数版本从基类中隐藏了int版本。DerivedTe