草庐IT

C++:在编译时消除这段代码的歧义?

我试图找到一种方法来消除这段代码的歧义(在编译时)(两天后:-)->get_value是有歧义的。#includetemplatestructtype2type{};templatestructBASE{staticconstexprintget_value(type2type){returnval;}};classX{};classY{};structA:publicBASE,publicBASE{};intmain(intargc,char**argv){Aa{};std::cout{})这是一个有效的运行时解决方案。#includetemplatestructtype2type{

c++ - 对 InputIterator 语义/概念要求的混淆

C++InputIterator是迭代器概念中最有限的类型之一。它只保证支持解引用、相等比较、前自增和后自增(以及后自增和解引用)因为InputIterator对象经常迭代任意流,您甚至不能确定对同一输入迭代两次会产生相同的值。不过,我很困惑,如果取消引用运算符operator*每次取消引用时都能保证返回相同的值,前提是您从不递增迭代器。例如,假设std::begin(some_input_stream)返回一个满足InputIterator概念要求的对象,而它不等于到或超过结束位置:autoit=std::begin(some_input_stream);autovalue1=*it

c++ - 从 back_insert_iterator 中提取容器的 value_type 的特征类

std::back_insert_iterator的value_type等于void,但它还有一个protected成员container包含指向底层Container的指针。我正在尝试编写一个traits类来提取容器的value_type,如下所示:#include#include#includetemplatestructoutit_vt:OutputIt{usingself_type=outit_vt;usingvalue_type=typenamestd::remove_pointer_t().container)>::value_type;};intmain(){std::v

c++ - 级联和信号/槽

我正在为这事兜圈子。就是无法理解信号和插槽。只是在寻找某种机制,当我的C++中出现信号时可以自动更新我的UI。示例:我在Qml中有两个带有文本的标签:返回值的_app.method。我有一个onClicked运行Q_INVOKABLE方法的按钮。该方法在完成时发出一个信号,例如,获取地理坐标并更新上述文本:赋值所依赖的值。我想要的是更新文本:一旦这些值发生变化就赋值。我只需要清楚地解释这些信号/槽。文档中的唯一示例似乎只假设QML或C++,而不是两者的混合。示例代码有示例,但文档中没有具体说明。如果你有简单的描述,我相信我能适应它。例如,1:在QML中定义,2:在hpp文件中定义,3:

c++ - 最大数 < x?

在C++中,假设我有一个数字x类型T它可以是整数或浮点类型。我想找到最大的数y类型T为此y持有。该解决方案需要模板化以透明地处理整数和float。您可以忽略x的边缘情况已经是T中可以表示的最小数字.可能的用例:这个问题被标记为过于本地化,因此我想提供一个我认为更通用的用例。请注意,我不是OP的原作者。考虑这个结构:structlower_bound{lower_bound(doublevalue,boolopen):value(open?value+0.1:value){}doublevalue;booloperator()(doublex){returnx>=value;}};此类模

c++ - *v8::String::Utf8Value(args[0]->ToString()) 不返回 node.js 插件参数的字符串

我发现*v8::String::Utf8Value(args[0]->ToString())在Node0.8.232位上返回正确的字符串,但在Node0.8上不返回正确的字符串。8个64位。有人知道为什么吗?我的node.js插件看起来像这样:#defineBUILDING_NODE_EXTENSION#include#defineMAX_OUTPUT_BUF80extern"C"char*do_sqlsig(char*in);usingnamespacev8;HandleSqlsig(constArguments&args){HandleScopescope;char*c_arg,*

c++ - 具有自动类型返回扣除的模板

我创建了一个模板化结构,并试图重载二元运算符。由于某种原因,即使类型在两者之间正确转换,该函数也不会返回正确的数据类型。templatestructNumber{constTvalue;Number(Ta):value(a){}templateautooperator*(Numberother){autonew_value=value*other.value;std::cout现在,如果我使用在main中调用的以下代码执行此操作。它返回第一个类型的数字,而不是更高类型的数字。autob=Number(6)*Number(2.3);//thisshouldbeanint*double=d

c++ - move 左值引用参数是不好的做法吗?

我最初认为move左值引用参数是不好的做法。C++开发人员社区确实普遍认同这一点吗?当我调用一个具有R值引用参数的函数时,很明显我必须期望可以move传递的对象。对于具有L值引用参数的函数,这并不是那么明显(在C++11引入move语义之前,这根本不可能)。但是,我最近采访过的其他一些开发人员不同意应避免move左值引用。是否有强有力的论据反对它?还是我的意见有误?由于我被要求提供一个代码示例,这里有一个(见下文)。这是一个仅用于演示问题的人为示例。很明显,在调用modifyCounter2()之后,再调用getValue()会导致segmentationfault。但是,如果我是ge

c++ - 如何将模板类的静态成员专门化为模板类型?

假设我有以下类(class):templatestructA{staticintvalue;};templateintA::value=0;我可以毫无问题地将A::value专门化为具体类型:structB{};templateintA::value=1;我想在模板类型上专门化A::value,我尝试了以下操作:templatestructC{};//error:templatedefinitionofnon-template'intA>::value'templatetemplateintA>::value=2;有什么办法可以做到这一点,还是只能在非模板类型上专门化A::value?

c++ - 此代码会产生未定义的行为还是仅仅是未指定的行为?

假设我们有两个编译单元,如下所示://a.cppexternintvalue2;intvalue1=value2+10;//b.cppexternintvalue1;intvalue2=value1+10;当我在VC2010上尝试时,它首先将value1和value2初始化为零。value1和value2不是都动态初始化并且默认初始化不适用于它们吗?谢谢, 最佳答案 3.6.2/1说“具有静态存储持续时间(3.7.1)的对象应在任何其他初始化发生之前进行零初始化(8.5)”。所以你是对的,它们没有被默认初始化。但是它们是零初始化的,