草庐IT

c++ - 如何构造具有唯一指针的 vector

我尝试用unique_ptr构造一个vector。但是我没有找到直接的方法。以下代码无法编译。错误是:调用“std::__1::unique_ptr>”的隐式删除的复制构造函数:#include#include#include#includeclasstest1{public:test1(){};test1(test1&&)=default;};intmain(intargc,constchar*argv[]){std::unique_ptrus(newtest1());std::vector>vec{move(us)};return0;} 最佳答案

c++ - Typedef、模板和 const 关键字

我在使用带有const关键字(用于函数参数类型)的模板时遇到问题,为了说明这一点,我创建了一个小代码:templatestructMethodCallerFactory{typedefReturnType(*Type)(ClassType*,Args...);templatestructMethod{staticTypecreateMethodCaller(){ReturnType(*caller)(ClassType*,Args...)=[](ClassType*obj,Args...args)->ReturnType{ReturnType(ClassType::*ptr)(Args

c++ 相当于 $obj->{$var}

我正在寻找以下PHP代码的C++等价物$obj=newstdClass();$obj->test="aaaa";$var="test";echo$obj->{$var};在C中甚至可能吗?我一直在寻找几个小时,但没有运气。谢谢 最佳答案 尝试:#include#include#includeusingnamespacestd;intmain(){unordered_mapobj;obj["test"]="aaaa";stringvar="test";cout这并不完全相同,因为这里的两种情况下test都是一个字符串。如果重要的是"t

c++ - 定义类模板的友元函数模板

我想定义一个类模板的函数模板。代码如下所示。templatestructtest{private:intvalue;templatefriendautofoo(testconstt){testr;r.value=t.value;returnr;}};intmain(){testt;foo(t);//expectedtoreturntestfoo(t);//expectedtoreturntestfoo(t);//expectedtoreturntest}但是它不会编译。与之前的问题相比,下面列出不同之处。函数模板的结果涉及类模板的另一个实例化。看来函数模板还得在外面定义。但我不确定。函

c++ - 为什么在初始化私有(private)静态成员时允许调用私有(private)静态方法?

此代码按我想要的方式编译和工作,但为什么呢?#includeclassTest{private:staticbool_inited;staticbool_init(){std::cout如果我做了一个我认为不相关的改变:bool_inited=Test::_init();它不再编译,给我关于尝试调用私有(private)方法的预期错误。 最佳答案 ThiscodecompilesandworksthewayIwantit,butwhy?因为在使用它的地方,您是在类范围内操作,作为类的一部分。如果你写的话也是一样的:staticvoi

c++ - return *this 在 C++ 中安全吗?

我想知道从函数返回*this是否安全。this问题显示了一些你可以做到的方法,我的问题是这个例子:structtest{stringt;stringb;public:test&A(stringtest){this->t=test;return*this;}test&B(stringtest){this->b=test;return*this;}};intmain(){autoa=test().A("a").B("b").A("newa");return0;}会不会有内存泄漏? 最佳答案 isreturn*thissafeinc++基

c++ - Qt 如何将文件移动到另一个现有目录

我是Qt的初学者,我项目的一部分是将现有文件移动到另一个现有目录?有人可以给我一个具体的例子吗?我不确定我是否应该使用Qfile::rename()。我试着这样写QDir::rename("/home/joshua/test.txt","/home/joshua/test/test_c.txt");但错误是不能在没有对象的情况下调用成员函数'boolQDir::rename(constQString&,constQString&)'QDir::rename("/home/joshua/test.txt","/home/joshua/test/test_c.txt");^对不起大家,都是

c++ - 为什么 Google Test/Mock 通过 std::unique_ptr 显示泄露的模拟对象错误?

假设有一个Bar对象,它使用了一个Foo对象。所有权是独占的,因此Bar在其构造函数中将Foo作为std::unique_ptr获取。我想用Google测试框架测试Bar,所以我编写了以下代码:usingnamespacetesting;classFoo{public:virtualintF()=0;};classBar{public:Bar(std::unique_ptr&&foo):m_foo(std::move(foo)){}intB(){returnm_foo->F();}private:std::unique_ptrm_foo;};classMockFoo:publicFoo

c++ - 枚举值的编译时列表

在现代C++(GCC5.1.0,所以我猜是C++14)中,在编译时传递enum值列表的最快方法是什么,然后,在运行时检查其中有哪些值?enumfoobar{foo,bar,baz};templatevoidf(){if(contains())std::cout())std::cout())std::cout();注意:这是为了单元测试,所以速度等主要是无关紧要的,主要目标是让不熟悉代码的人可以破译它。 最佳答案 这是一个建议#include//pulledinbyalotofstuffenumclassoptions{foo,bar

c++ - 从未使用过的无效默认成员初始值设定项

请考虑以下代码:templatestructTest{Test()=default;explicitTest(constT&arg):m_member(arg){}Tm_member{};};intmain(){Testt1;intv2=34;Testt2(v2);//(!)return0;}上面的代码是否应该编译并且没有未定义的行为?标记(!)的行使用引用类型的参数实例化类模板Test。在这种情况下,成员Test::m_member的默认初始化器是无效的(好吧,引用必须用某个对象初始化)。但另一方面,程序中从未使用过默认构造函数(唯一可以使用该默认初始化程序的构造函数),因此不应实例