草庐IT

foo_value

全部标签

c++ - 是否可以将一对 <Key, Value> 转换为一对 <const Key, Value>?

所以我有一个模拟映射const_iterator的智能迭代器,它需要在内部构建返回类型。显然,我想存储一个pair在我的迭代器类中(因为我需要修改它),但同时我希望解引用函数呈现一个pair(实际上它分别是constpair&和constpair*)。到目前为止我想出的唯一解决方案是每次更改我的迭代器类指向更改的值时动态分配一对新的。不用说,这不是一个好的解决方案。我也试过*const_cast>(&value)其中value声明为pair.我们将不胜感激任何帮助(以及无法完成的知识)。编辑出于好奇:我最终存储了一个pairp在我的迭代器类中。为了更改这对,我根据底层迭代器(map::

c++ - C/C++ sizeof 运算符 : Why does sizeof( 'a' ) return different values?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Sizeofcharacter('a')inC/C++我是C的初学者,对此感到困惑。C:我尝试使用“%zu”修饰符在C中打印sizeof('a'),它打印出值4。C++:在C++中使用cout打印sizeof('a')和printf(使用上述格式)都打印出值1。我认为正确的值应该是1,因为'a'将被视为字符。为什么它不在C中返回4?两种语言的操作大小是否不同?如果是这样,有什么区别,为什么它会返回不同的值?我在这两种情况下都使用了gcc编译器。

c++ - 根据 value_type 调用适当的构造函数 : integer or float

我有一个函数,它使用均匀分布将最小值和最大值之间的随机值填充到容器中。#include#include#include#includetemplatevoiduniform_random(TContainer&container,consttypenameTContainer::value_typemin,consttypenameTContainer::value_typemax){std::random_devicerd;std::mt19937gen(rd());//Belowlinedoesnotworkwithintegerscontainerstd::uniform_rea

c++ - 我看到许多使用 "Foo ^ bar"的 C++ 示例 - 什么是 "^"?

与.NET相关吗?它似乎是某种指针,有什么区别?编辑:我实际上知道它是XOR运算符,但是从这个页面看这个例子。voidobjectCollection(){usingnamespaceSystem::Collections;**ArrayList^as=gcnewArrayList;**//...}这是什么?谢谢。 最佳答案 我假设您正在查看以下形式的结构:Foo^bar=gcnewFoo();你是对的,在.NET中它是一个“类似”指针的类型并且是C++/CLI的一部分,但不是标准的ISOC++。它是对垃圾收集的托管.NET对象的引

c++ - char *foo 与 char* foo

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。简单的问题是:你为什么要写char*foo;不是char*foo;让我解释一下:对我(来自Java)来说,声明类似于;在上面的例子中,我声明了一个名为foo的变量,类型为char*(因为它是一个指向char的指针)。但无论我在哪里阅读c/c++/c#-Code,它看起来都像是一个名为*foo的char类型的变量。编译器不关心空格,但我作为开发人员关心。t

c++ - 如何在 while 循环中计算 "std::cin>>value"?

目前正在自学C++Primer5th。这里有一些我不确定的东西。(我在F.A.Q上找不到确切的相关问题)。考虑这个while循环:while(std::cin>>value){...}\\valueherewasdefinedasint.课本上说:Thatexpressionreadsthenextnumberfromthestandardinputandstoresthatnumberinvalue.Theinputoperator(§1.2,p.8)returnsitsleftoperand,whichinthiscaseisstd::cin.Thiscondition,there

c++ 多态性 ((X*)y)->foo() vs ((X)*y).foo()

假设Y是类X的派生类,并且X声明foo是虚拟的。假设y是类型(Y*)。然后((X*)y)->foo()将执行Y版本的foo(),但((X)*y).foo()将执行X版本。你能告诉我为什么多态性不适用于取消引用的情况吗?我希望这两种语法都能产生Y版本的foo()。 最佳答案 您正在切片Y对象部分并将该对象复制到X对象中。然后调用的函数是在X对象上调用的,因此调用了X的函数。当您在声明或强制转换中指定C++中的类型时,这意味着声明或强制转换为的对象实际上是该类型,而不是派生类型。如果您只想将对象视为X类型(也就是说,如果您希望表达式的静

c++ - 错误 C2106 : '=' : left operand must be l-value

查看有关错误C2106的其他问题,我仍然不知道我的代码有什么问题。编译时出现以下错误:c:\driver.cpp(99):errorC2106:'=':leftoperandmustbel-valuec:\driver.cpp(169):errorC2106:'=':leftoperandmustbel-value代码行如下:payroll.at(i)=NULL;//Line99payroll.at(count++)=ePtr;//Line169我不明白为什么会抛出这个错误。在这个项目中,我将我的driver.cpp从员工对象指针数组更改为我制作的自定义Vector模板。我声明Vect

c++ - 在 C++11/14 中说 "foo not in {bar, baz}"的漂亮方式

我正在编写C++,但缺少Python的清晰度。但我知道C++一直在发展,我想知道是否有更好的方法来做这样的事情:if(foo!=bar&&foo!=baz)在Python中我会这样做:iffoonotin{bar,baz}:C++11或C++14中是否有一个奇特的特性允许我做一些类似可读的事情?编辑:很多人想知道为什么我要尝试替换这么短的东西。我不是,但我不想让我的示例像原始代码一样丑陋和不可读。它更像是:if(somelongvariablename.somelongmethodname()!=SomeReallyLongNamespace::AndAnotherSubClassna

c++ - 为什么 C++ 编译器无法将 "if(test) --foo"优化为 "foo -= test"?

我有一个函数可以找到给定整数的下一个2的幂。如果整数是2的幂,则返回幂。非常简单:charnextpow2if(inta){charfoo=char(32-__builtin_clz(a));boolispow2=!(a&a-1);if(ispow2)--foo;returnfoo;}然而,在使用带有-O2的gcc6进行编译之后,在检查生成的程序集之后,我发现这是在计算foo-1之后用看似无用的指令cmovne编译的。更糟糕的是,对于gcc5和更早的版本,我在代码中得到了一个实际的jne分支。编译它的更快方法就像我编写了以下函数:charnextpow2sub(inta){charfo