草庐IT

弱引用

全部标签

C++0x 右值引用模板参数推导

给定GMan's美味邪恶auto_cast炮制效用函数here,我一直在试图弄清楚为什么当我尝试auto_cast时它不为我编译来自右值(在MSVC10.0上)。这是我正在使用的代码:templateclassauto_cast_wrapper:boost::noncopyable{public:templatefriendauto_cast_wrapperauto_cast(R&&pX);templateoperatorU()const{returnstatic_cast(std::forward(mX));}private://errorC2440:'initializing':c

C++ 依赖注入(inject)——通过引用还是通过 boost::shared_ptr?

在需要构造函数依赖注入(inject)的情况下,使用引用注入(inject)与使用boost::shared_ptr注入(inject)有哪些注意事项?还有其他常见的方法吗?它与上述两种方法相比如何? 最佳答案 您可以选择如何管理要注入(inject)的对象的生命周期。整体架构可能会决定哪种选择最有意义。有了引用,更高层次的东西必须管理对象的生命周期;使用shared_ptr将自动管理生命周期。 关于C++依赖注入(inject)——通过引用还是通过boost::shared_ptr?,

c++ - 使用删除的复制构造函数初始化 const 引用成员

此代码在B中有一个constA&a成员,其中A有一个已删除的复制构造函数,在GCC中无法编译4.8.1,但它在clang3.4中工作正常:classA{public:A()=default;A(constA&)=delete;A&operator=(constA&)=delete;};classB{public:B(constA&a):a{a}{}private:constA&a;};intmain(){Aa{};Bb{a};}哪一个编译器是正确的?GCC中的错误是:prog.cpp:Inconstructor‘B::B(constA&)’:prog.cpp:11:14:error:u

C++ 对 const 引用参数的依赖没有改变

请考虑以下代码:voidfunc1(constint&i);voidfunc2(inti);voidf(){inta=12;func1(a);func2(a);}使用带有-O3的g++4.6编译,我可以看到编译器在函数调用之间重新读取“a”的值。将a的定义更改为“constint”,编译器不会这样做,而是简单地将立即值“12”加载到edi中。如果a不是const,也是如此,但我将func1的签名更改为按值接受。虽然不是代码生成中的错误,但这仍然是一种奇怪的行为。既然func1promise不改变a,编译器的代码为什么要根据a是否为const而改变?编辑:一些怀疑论者声称我可能读错了代码

c++ - 比函数引用更有效的方法?

我有一个使用函数引用的类:doubleu(constdouble&x,constdouble&y){returnx*y;}classequation{equation(double(&in_u)(constdouble&,constdouble&));//...protected:double(&u)(constdouble&,constdouble&);}在典型的运行过程中,此函数将被调用大约108次。该类进入库,函数u由库的用户定义。所以我不能在类中定义函数。我已阅读this:(std::function)...hasthedisadvantageofintroducingsome

c++ - 引用变量的增量运算符

为什么预增量有效而后增量对引用变量不起作用?#includevoidswap(int&,int&);intmain(){intx=10,y=20;int&a=x,&b=y;swap(++a,++b);//swap(a++,b++)isnotallowed.printf("%d%d",a,b);return0;}voidswap(int&x,int&y){x+=2;y+=3;}为什么swap(++a,++b)允许但是swap(a++,b++)说:[Error]invalidinitializationofnon-constreferenceoftype'int&'fromanrvalue

c++ - 缩写函数模板与带有转发引用参数的函数模板

有什么区别带有转发引用参数的函数模板templatevoidUniversal_func(T&&a){}和缩写函数模板?voidauto_fun(auto&&a){}我可以用auto_fun替换Universal_func吗?Universal_func是auto_fun还是它们相等?我已经测试了下面的程序。看起来两者是一样的。templatevoidUniversal_func(T&&a){}voidauto_fun(auto&&a){}intmain(){inti;constintconst_i=0;constintconst_ref=const_i;//forwardingref

c++ - 只要我不使用它,我可以安全地创建对可能无效内存的引用吗?

我想在C++中解析UTF-8。解析新字符时,我事先不知道它是ASCII字节还是多字节字符的前导,也不知道我的输入字符串是否足够长以包含剩余字符。为简单起见,我想将接下来的四个字节命名为a、b、c和d,因为我在使用C++,所以我想使用引用来完成它。只要我在知道访问是安全的之前不访问它们,那么在函数开头定义这些引用是否有效?示例:voidparse_utf8_character(conststrings){for(size_ti=0;i上面的例子展示了我想在语义上做的事情。它没有说明我为什么要这样做,但显然实际代码会涉及更多,因此仅当我知道访问是安全的并且我需要它们时才定义b、c、d会太冗

c++ - Microsoft C++ 语言引用

每当有人提出任何问题并需要引用文本时,我从来没有看到MSDNC++LanguageReference被推荐。浏览了一下,个人感觉写的非常好。它没有像标准那样经常使用有什么具体原因吗?是不是因为它包含了一些VC++特有的特性? 最佳答案 我相信这是因为我们这些引用引用的人引用了实际标准本身。 关于c++-MicrosoftC++语言引用,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions

c++ - 如何通过参数包传递引用?

我有以下代码:#includetemplatevoidfoo(Funf,Args...args){f(args...);}intmain(){inta=2;intb=1000;foo([](int&b,inta){b=a;},b,a);std::printf("%d\n",b);}目前它打印1000,也就是说,b的新值在某处丢失了。我猜那是因为foo按值传递参数包中的参数。我该如何解决? 最佳答案 通过引用:templatevoidfoo(Funf,Args&&...args){f(std::forward(args)...);}