草庐IT

collection_foo_bar

全部标签

c++ - char *foo 与 char* foo

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

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++ - 在 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

java - Java Collections Framework 的 Python 等价物是什么?

Java集合框架就像C++标准模板库:“用于表示和操作集合(将多个元素组合成一个单元的对象)的统一架构。”http://java.sun.com/docs/books/tutorial/collections/intro/index.html 最佳答案 事实证明,相当于Python中的Java集合框架的是……Python。Java集合框架中的所有核心集合都已存在于核心Python中。试试吧!序列提供列表、队列、堆栈等。字典是您的哈希表和映射。集合存在等。人们可能会认为Python是一种比Java更“高级”的语言,因为它本质上提供了所

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

c++ - 错误 : jump to label 'foo' crosses initialization of 'bar'

以下C++示例无法使用gcc或clang进行编译,但仅使用ICC生成警告,而使用MSVC则完全不生成任何警告:intmain(intargc,char*argv[]){if(argcg++:init.cpp:13:error:jumptolabel‘clean_up’init.cpp:4:error:fromhereinit.cpp:7:error:crossesinitializationof‘inti’clang++:init.cpp:4:9:error:cannotjumpfromthisgotostatementtoitslabelgotoclean_up;^init.cpp:

c++ - collect2.exe : error: ld returned 5 exit status

我最近更新了所有msys2包,现在我无法构建我的项目。错误发生在链接其中一个.dll-target_library.dll时。我不清楚错误消息。状态5是什么意思?collect2.exe:error:ldreturned5exitstatus完整消息:g++-Wl,-s,--relax,--gc-sections-shared-Wl,-subsystem,windows-mthreads-Wl,--out-implib,C:/msys64/workspace/Project_Root_Directory/project/src/../build/release/plugins/libt

C++:可以将 "try { foo(); } catch (...) { throw; }"优化为 "foo();"吗?

在C++中,是如下代码try{foo();}catch(...){throw;}在语义上等同于像这样调用foo吗?foo();如果是这样,我是否可以期望最先进的编译器避免第一个版本到第二个版本(在启用优化的情况下编译时)?换句话说,如果我使用NDEBUG编译这段代码并启用优化try{foo();}catch(...){assert(some_check());throw;}我可以假设这个丑陋的版本永远不会慢吗#ifndefNDEBUGtry{#endiffoo();#ifndefNDEBUG}catch(...){assert(some_check());throw;}#endif

java - C++/ java : Efficiently find a set in the collection containing given value

假设我们有一组互斥集合{A,B,C,D}其中A={1,2,3},B={4,5,6},C={7,8,9},D={10,11,12}给定一个值Z,例如3,我希望它返回集合A的索引,因为A的成员是3。问题是我如何使用C++或JAVA高效地完成它。我当前的解决方案:将A、B、C、D作为HashSet(或C++中的unordered_set)存储在容器中并循环遍历每个集合,直到包含Z找到了。问题在于容器中存储的集合数量的复杂度为O(n)。有什么方法(或任何数据结构来存储这些集合)比O(n)更快地做到这一点吗? 最佳答案 您可以创建一个将值映射

c++ - 我可以使用 foo<T..., int, U...> 这样的模式部分特化模板吗?

如果可能的话,可以在不递归的情况下索引可变参数模板参数包。但是,GCC是refusingtopickupmypartialspecialization这里:templatestructelement_impl;templatestructelement_impl...,pair,pair...>>{typedefTtype;};prog.cpp:Ininstantiationof'element>':prog.cpp:52:34:instantiatedfromhereprog.cpp:47:79:error:invaliduseofincompletetype'structeleme