草庐IT

强引用

全部标签

c++ - numeric_limits 不适用于引用类型是否有原因?

如果你错误地做了类似的事情:#includeintarr[3];autox=std::numeric_limits::max();您将从STL实现中的文件中获得无用的错误消息。问题是模板参数是一个引用,所以解决方法是删除它:autox=std::numeric_limits>::max();现在我的问题是为什么numeric_limits不知道自己做这个?我会理解你不想删除指针(因为char指针的max和char的max是非常非常不同的东西),但我假设只要你有一个引用作为对numeric_limits的参数,你会对通过删除它获得的结果感到满意。 最佳答案

c++ - 什么时候通过复制/引用?

假设我有两个用于operator=重载的模板:classMyClass{public:templatestd::enable_if_toperator=(Tvalue){std::coutstd::enable_if_toperator=(constT&value){std::cout与std::enable_if一起使用的最佳条件是什么?我想到了这个:templatestructpass_copy_cond:std::conditional::value||std::is_pointer::value||(std::is_trivial::value&&sizeof(T)::type

c++ - 将指针转换为指针引用会导致未定义的行为吗?

我遇到了以下丑陋的代码,想知道标准对此有何规定。调用foo()是否被认为会导致未定义的行为?或者它是无害的?#includeclassBase{};classDerived:publicBase{};voidfoo(Base*&b){std::cout我相信丑陋的c-cast已经完成,因为简单的(Base*)cast会导致编译错误。即便如此,它现在编译是否只是因为严格的别名?还是标准允许转换为引用? 最佳答案 这是相当UB,因为您有效地重新解释派生指针作为基指针。原因是您没有将Derived指针转换为Base指针,而是将T&转换为U

c++ - 在 Visual Studio 2005 中的取消引用指针的地址上设置数据断点

我想知道是否有办法执行以下操作:我有一个结构包含一个成员,当我将结构传递给API函数时,该成员是指向内核分配的内存块的指针(该结构是一个WAVEHDR,成员是保留字段。)我可以在保留成员的值上设置一个数据断点——这本身并不是很有帮助。当遇到断点时,我想做的是取消引用存储在reserved中的指针,并在该指针指向的内存上设置一个新的数据断点。当该内存设置为已知值时,我希望VisualStudio中断。我知道如何从宏设置断点,以及如何让VisualStudio在遇到断点时从断点调用该宏,但我不知道是否可以将指针值传递给宏,以便它可以在正确的地址上设置断点。UI不提供执行此操作的方法。有没有

c++ - std::string 的引用计数

我正在查看basic_string的代码(与g++4.2.1捆绑在一起)。复制构造函数使用grab()函数来“抓取”字符串的拷贝(增加其引用计数):_CharT*_M_grab(const_Alloc&__alloc1,const_Alloc&__alloc2){return(!_M_is_leaked()&&__alloc1==__alloc2)?_M_refcopy():_M_clone(__alloc1);}只有当两个字符串的分配器相同时,这才会增加引用计数——这是有道理的。但是,复制构造函数是:basic_string(constbasic_string&__str):_M_d

c++ - 本地实现的接口(interface)引用

请考虑以下代码:structA{virtual~A(){}virtualintgo()=0;};structB:publicA{intgo(){return1;}};structC:publicB{intgo(){return2;}};intmain(){Bb;B&b_ref=b;returnb_ref.go();}在GCC4.4.1下(使用-O2),调用B::go()得到内联(即,没有虚拟分派(dispatch)发生)。这意味着编译器承认a_ref确实指向一个B类型变量。B引用可用于指向C,但编译器足够聪明,可以预见情况并非如此,因此它完全优化了函数调用,内联函数。太棒了!这是一个令

c++ - gcc 报告基于版本的库的未引用符号

我的一个共享库my.so使用基于版本的符号作为库test.so中的符号@@test_1.2.3。当我将my.so共享库与我的可执行文件链接时,它显示“未引用的符号符号@@test_1.2.3”。当链接行如下时会发生这种情况-g++-omyexecutablemyexecutable.o-L/path-to-my.so-lmy-L/path-to-test.so-ltest如果我将链接链接更改为-g++-omyexecutablemyexecutable.o-L/path-to-my.so-lmy/path-to-test.so/libtest.so它有效。为什么libtest.so在使

c++ - 将 std::forward_as_tuple() 结果传递给可能从该对象的右值引用成员移动的多个函数?

编辑:我认为我所问的最可能的用例是创建一个从std::forward_as_tuple()接收右值引用元组的函数.想到这个问题的原因是因为我正在检查传递给构造函数初始值设定项的对象的成员以查看它们是否是右值引用(我乐于接受建议告诉我这是wrongwrongwrongwrong...希望遵循经验法则以避免将来出现这种情况,但这就是引发问题的原因)。我突然想到,在稍微不同的上下文中,我可能最终将一个具有右值引用成员的对象传递给多个函数(或函数对象),我可能会或可能不会控制,这些成员可能会移动。templatevoidmy_func(std::tuple&&tup){//iftup'smem

c++ - 一个库 "misbehaved",引用传递,不应该编译,为什么编译了?

我正在使用yaml-cpp,一个yaml解析库,我快要疯了,因为我的yaml文档没有被完全解析。结果证明这是因为构造函数应该被赋予一个引用,而不是一个对象。错误的代码:ifstr;YAML::Parserparser(ifstream("items9.yml"));正确的代码:ifstreamifstr("items9.yml");YAML::Parserparser(ifstr);有人告诉我它不应该编译,我正在使用visualC++10。这是正常行为吗我应该注意它,还是库设计错误或visualC++错误地接受了代码? 最佳答案 这

c++ - 根据大小自动按值或按引用传递类

我有这个类,我想将其作为LPARAM参数传递给Windows。因为它足够小,可以放在LPARAM中,所以我想按值传递它,但如果它稍后扩展,我希望它自动切换到按引用传递。我会用类似的东西typedefboost::call_traits::param_typeCMyClassParam;应该是constCMyClass或constCMyClass&取决于是否sizeof(CMyClass)但是call_traits只优化小的POD,而不是小的类。typedef由Anycorn的建议处理:typedefboost::mpl::if_c::typeCMyClassParam;然后,我如何在C