Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

8
如果我将Objective-C用于低级代码,我的iPhone应用程序是否会对性能产生影响?
在iPhone或其他便携式硬件上对CPU密集型或GPU密集型应用程序进行编程时,必须做出明智的算法决策,以加快代码速度。 但是,如果您使用的语言比另一种语言的性能差,那么即使算法选择很好,也可能会很慢。 是否有任何硬数据将Objective-C与C ++进行比较,尤其是在iPhone上,但可能仅在Mac桌面上,以比较各种类似语言的性能?我对比较C和Objective-C的这篇文章非常熟悉,但这是将两种面向对象的语言相互比较的一个更大的问题。 例如,C ++ vtable查找真的比Obj-C消息快吗?快多少?线程化,多态性,排序等。在我寻求使用重复的对象模型和各种测试代码构建项目之前,我想知道是否有人已经这样做以及在何处得到结果。这种类型的测试和比较本身就是一个项目,可能会花费大量时间。也许这不是一个项目,但是可以比较两个,只有输出。 我在寻找硬数据,而不是传福音。像你们中的许多人一样,出于各种原因,我爱又恨这两种语言。此外,如果外面有人积极地追求同样的事情,那么我会投入一些代码来查看最终结果,这很有趣,而且我相信其他人也会提供帮助。我的猜测是它们都有长处和短处,我的目标是精确地找出它们是什么,以便在实际情况下可以避免/利用它们。


1
void_t“可以实现概念”吗?
我正在观看Walter Brown在CppCon2014上有关模板元编程的第二部分,在此期间他讨论了他的新颖void_t<>结构的用法。彼得·索默拉德(Peter Sommerlad)在演讲中问了我一个不太明白的问题。(链接直接指向问题,正在讨论的代码是在此之前直接进行的) 索默拉德问 沃尔特,这是否意味着我们实际上可以立即实施精简概念? 沃尔特回应 哦耶!我已经完成了...它没有完全相同的语法。 我了解这次交流是关于Concepts Lite。这种模式真的那么通用吗?无论出于什么原因,我都没有看到它。有人可以解释(或素描)这样的样子吗?这仅仅是关于enable_if和定义特征,还是提问者指的是什么? 该void_t模板定义如下: template<class ...> using void_t = void; 然后,他使用它来检测类型语句是否格式正确,并使用它来实现is_copy_assignable类型特征: //helper type template<class T> using copy_assignment_t = decltype(declval<T&>() = declval<T const&>()); //base case template template<class T, class=void> struct is_copy_assignable : std::false_type {}; //SFINAE version only for types where copy_assignment_t<T> is well-formed. template<class T> …

3
这是std :: ref行为逻辑上的吗?
考虑以下代码: #include <iostream> #include <functional> int xx = 7; template<class T> void f1(T arg) { arg += xx; } template<class T> void f2(T arg) { arg = xx; } int main() { int j; j=100; f1(std::ref(j)); std::cout << j << std::endl; j=100; f2(std::ref(j)); std::cout << j << std::endl; } 执行时,此代码输出 …
68 c++  c++11  ref 

6
使用Eclipse / CDT调试C ++代码时更好的变量探索
使用Eclipse和CDT调试C ++代码,变量窗口比较麻烦,并且对于标准模板库或boost中定义的类型(例如shared_ptr)不是很有帮助。 这只是一个std :: vector的示例: bar {…} std::_Vector_base<TSample<MyTraits>, std::allocator<TSample<MyTraits> > > _M_impl {…} std::allocator<TSample<MyTraits> > {…} _M_start 0x00007ffff7fb5010 _M_finish 0x00007ffff7fd4410 _M_end_of_storage 0x00007ffff7fd5010 即使有关这些类型的内部的信息可能有用,但在几乎任何情况下,我都希望在这里有一个更清晰的表示形式,即std :: vector的值列表。是否有任何工具,插件或其他修改工具可以做到这一点? 编辑 以下解决方案不适用于linux。我正在使用ubuntu 14.04,eclipse,g ++,gdb。 我找不到软件包gdb-python和linux不使用mingw
68 c++  eclipse  gdb  eclipse-cdt 

8
旧版C / C ++项目中的死代码检测[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 4年前关闭。 改善这个问题 您将如何进行C / C ++代码中的无效代码检测?我有一个相当大的代码库可以使用,并且至少有10-15%是无效代码。是否有任何基于Unix的工具来识别此区域?有些代码仍然使用大量预处理器,自动化过程可以处理吗?

4
从理论上讲,C ++实现能否并行化两个函数参数的求值?
给定以下函数调用: f(g(), h()) 由于未指定函数参数的求值顺序(据我所知,仍然是C ++ 11中的情况),理论上可以执行g()并h()并行执行吗? 这种并行化只能踢都g和h已知相当琐碎(最明显的情况下,仅访问数据的本地,以自己的身体),以免引入并发问题,但是,除此之外,限制我什么都看不到,禁止它。 那么,标准允许吗?即使仅按常规规则进行? (在此答案中,Mankarse主张相反;但是,他没有引用该标准,而且我的通读[expr.call]并未显示任何明显的措辞。)

12
什么时候应该在C ++中使用typedef?
在我从事C ++(MFC)编程的那几年中,我从没有感觉到需要使用typedef,因此我真的不知道它的用途。我应该在哪里使用?在某些实际情况下,typedef首选使用吗?还是这真的是特定于C的关键字?
68 c++  typedef 


8
Google C ++样式指南的无例外规则;STL?
Google的C ++风格指南说“我们不使用例外”。该样式在异常使用方面未提及STL。由于STL分配器可能会失败,因此它们如何处理容器引发的异常? 如果他们使用STL,如何将分配失败通知呼叫者?STL方法(例如push_back()或map)operator[]不会返回任何状态代码。 如果他们不使用STL,则使用什么容器实现?
68 c++  exception  stl 



5
链接器返回“重定位在符号索引处有无效的符号...”
我正在Ubuntu上尝试一些代码。我正在尝试运行以下代码 #include <cstdlib> #include <cmath> #include <ctime> #include "random.h" using namespace std; /* Function prototype! */ void initRandomSeed(); int randomInteger(int low,int high){ initRandomSeed(); double d= rand()/(double(RAND_MAX)+1); double s= d*(double(high)-low+1); return int(floor(low)+s); } double randomReal(int low,int high){ initRandomSeed(); double d=rand()/(double(RAND_MAX)+1); double s=d*(double(high)-low+1); return low+s; } bool randomChance(double p){ initRandomSeed(); return randomReal(0,1)<p; …
67 c++  ubuntu  g++ 

8
带重载算子的De Morgan定律优化
每个程序员都应该知道: (德摩根定律) 在某些情况下,为了优化程序,编译器可能会修改(!p && !q)为(!(p || q))。 这两个表达式是等效的,并且对第一个或第二个表达式的求值没有区别。 但是在C ++中,可能会重载运算符,而重载的运算符可能并不总是尊重此属性。因此,以这种方式转换代码实际上将修改代码。 当和重载时!,编译器是否应使用De Morgan定律?||&&

2
为什么std:set(使用单个冒号)可以编译?
我不小心写了 std::set<string> keys; 如: std:set<string> keys; 但奇怪的是,Visual Studio 2013仍然可以编译。 为什么会这样? 实际上keys不仅被定义,而且后来被用作一组字符串,例如 if(keys.find(keystr)==keys.end()){ keys.insert(keystr); toret.push_back(tempv); }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.