Questions tagged «c++»

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



2
为什么`std :: initializer_list`通常按值传递?
我在SO上看到的几乎所有帖子中都包含a std::initializer_list,人们倾向于std::initializer_list按值传递a 。根据这篇文章: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/ 如果要复制所传递的对象,则应按值传递。但是复制astd::initializer_list不是一个好主意,因为 复制astd::initializer_list不会复制基础对象。在原始初始化程序列表对象的生存期结束后,不能保证基础数组存在。 那么,为什么它的一个实例经常按值而不是按值传递const&,即保证不会产生不必要的复制?
71 c++  c++11 

4
使用printf()保留两位小数
我正在尝试使用printf()以下方法将数字写到两位小数: #include <cstdio> int main() { printf("When this number: %d is assigned to 2 dp, it will be: 2%f ", 94.9456, 94.9456); return 0; } 运行程序时,将得到以下输出: # ./printf When this number: -1243822529 is assigned to 2 db, it will be: 2-0.000000 这是为什么? 谢谢。
71 c++  c  printf  decimal 

10
声明参考并稍后初始化?
我有对的引用MyOjbect,但确切的对象取决于条件。所以我想做这样的事情: MyObject& ref; if([condition]) ref = MyObject([something]) else ref = MyObject([something else]); 我现在无法执行此操作,因为编译器不允许我声明但不能初始化引用。我该怎么做才能实现自己的目标?
71 c++  reference 

3
std :: atomic的锁在哪里?
如果数据结构中包含多个元素,则其原子版本不能(始终)是无锁的。有人告诉我,这对于较大的类型是正确的,因为CPU无法在不使用某种锁的情况下原子地更改数据。 例如: #include <iostream> #include <atomic> struct foo { double a; double b; }; std::atomic<foo> var; int main() { std::cout << var.is_lock_free() << std::endl; std::cout << sizeof(foo) << std::endl; std::cout << sizeof(var) << std::endl; } 输出(Linux / gcc)为: 0 16 16 由于原子和foo的大小相同,因此我认为原子中不会存储锁。 我的问题是: 如果原子变量使用锁,它将存储在哪里,这对于该变量的多个实例意味着什么?
71 c++  c++11  x86  atomic  stdatomic 

6
fps游戏中的瞄准机器人如何工作?
我很好奇,是否有人对在线FPS游戏(例如Counter-Strike)中的瞄准机器人有任何经验/知识。我很好奇,想了解更多有关光标如何知道如何锁定对面玩家的信息。显然,如果我想作弊,我可以去下载一些作弊,所以这更多的是学习。它涉及什么?他们是否钩住用户的鼠标/键盘以将光标移动到正确的位置?作弊应用程序如何知道确切指向光标的位置?作弊应用程序必须能够访问游戏应用程序中的数据,这是如何实现的? 编辑:sids答案,人们如何获得那些已知的内存位置来从中获取数据?EDIT2:可以说我使用调试程序或其他方法在位置0xbbbbbbbb处找到了一些想要的值。现在我该如何访问和使用存储在应用程序中该位置的数据,因为我不拥有该内存,而游戏却拥有。还是因为我已经注入到进程中并可以使用memcpy或其他东西复制该地址处的内存,所以现在可以访问它了? 还有其他人要补充吗?尝试尽可能多地了解这一点!
71 c++  c  hook 

7
向量或地图,使用哪一个?
我听过很多人说,如果容器中期望的元素数量相对较少,那么最好使用std::vector而不是std::map使用容器,即使您仅将容器用于查找而不是迭代。 这背后的真正原因是什么? 显然,的查询性能std::map不会比std::vector(尽管可能会相差十亿分之一秒/微秒)差,但是它与内存使用情况有关吗? 是否std::vector比分std::map段虚拟地址空间更好/更糟糕? 我正在使用Visual Studio附带的STL库(即Microsoft的实现)。与其他实现相比,这有什么区别吗?
71 c++  performance  stl 


2
我应该分配或重置unique_ptr吗?
在通常情况下,拥有对象的生命周期与其拥有者相关联,我可以使用2种方法之一的唯一指针。。 可以分配: class owner { std::unique_ptr<someObject> owned; public: owner() { owned=std::unique_ptr<someObject>(new someObject()); } }; 可以使用reset方法: class owner { std::unique_ptr<someObject> owned; public: owner() { owned.reset(new someObject()); } }; 为了最佳实践,我是否应该优先选择一种形式? 编辑:对不起人们。我过度简化了这一点。堆分配以初始化方法而不是ctor进行。因此,我不能使用初始化程序列表。


5
C ++静态多态性(CRTP)并使用派生类中的typedef
我阅读了Wikipedia上有关C ++中反复出现的模板模式以实现静态(阅读:编译时)多态性的文章。我想对其进行概括,以便可以基于派生类型更改函数的返回类型。(由于基本类型从template参数知道派生类型,因此这似乎应该可行)。不幸的是,以下代码无法使用MSVC 2010进行编译(我现在无法轻松访问gcc,因此我还没有尝试过)。有人知道为什么吗? template <typename derived_t> class base { public: typedef typename derived_t::value_type value_type; value_type foo() { return static_cast<derived_t*>(this)->foo(); } }; template <typename T> class derived : public base<derived<T> > { public: typedef T value_type; value_type foo() { return T(); //return some T object (assumes T is default constructable) } …

12
GCC C ++链接器错误:对“ vtable for XXX”的未定义引用,对“ ClassName :: ClassName()”的未定义引用
我正在使用Eclipse-CDT在Ubuntu x64上设置一个C ++项目。我基本上是在打个招呼,并连接到商业的3rd Party库。 我已经包含了链接到它们的库的头文件,但是仍然出现链接器错误。除了明显的问题之外,这里是否还有其他可能的问题(例如,我99%确信我正在链接到正确的库)。 有没有办法确定我链接到的静态库是64位的? 有没有一种方法可以确认该库具有我期望的类(和方法)? Eclipse说: 建立目标:LinkProblem 调用:GCC C ++链接器 g ++ -L / home / notroot / workspace / somelib-3 / somelib / target / bin -o“ LinkProblem” ./src/LinkProblem.o -lsomelib1 -lpthread -lsomelib2 -lsomelib3 ./src/LinkProblem.o:在“ main”函数中: /home/notroot/workspace/LinkProblem/Debug/../src/LinkProblem.cpp:17:对`SomeClass :: close()的未定义引用 ./src/LinkProblem.o:在函数“ SomeOtherClass”中: /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148:对`SomeClass :: SomeClass()的未定义引用 /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148:对`vtable for SomeOtherClass'的未定义引用 /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:151:对`SomeClass …
70 c++  linker  g++  eclipse-cdt 

6
有效地将Visual Studio项目属性用于多个项目和配置
我一直使用GUI支持的内置Visual Studio来配置我的项目,通常使用属性表,以便几个项目将使用一个公共集。 我主要的工作之一是管理多个项目,配置和平台。如果仅使用主GUI进行所有操作(右键单击项目->属性),它很快就会变得一团糟,难以维护并且容易出现错误(例如无法正确定义某些宏或使用错误的运行时库等)。处理不同的人将依赖库放在不同位置的事实(例如,我的所有库都位于“ C:\ Libs \ [C,C ++] \ [lib-name] \”中),然后经常管理这些库的不同版本同样(发布,调试,x86,x64等)也是一个大问题,因为它极大地增加了在新系统上进行设置的时间,然后是版本控制和使每个人的路径分开的问题。 。 属性表使这更好一些,但是我不能让一个表具有针对不同配置和平台的单独设置(下拉框呈灰色),导致我有很多表,如果以正确的顺序继承这些表,可以满足我的要求( “ x86”,“ x64”,“ debug”,“ release”,“ common”,“目录”(通过定义用户宏(如BoostX86LibDir来解决前面提到的依赖性问题)等),以及是否以错误的顺序继承(例如“ x64”和“ debug”之前的“ common”)会导致诸如尝试链接不正确的库版本或错误命名输出等问题。 我想要的是一种处理所有这些分散的依赖性并设置解决方案中所有项目都使用的“规则”的方法,例如将输出库命名为“ mylib- [vc90,vc100]-[x86]”。 ,x64] [-d] .lib”,而不必为每个单独的项目,配置和平台组合执行所有这些操作,然后将它们正确同步。 我知道要转移到完全不同的系统(例如CMake)上来创建所需的文件,但是这会使其他地方的事情变得复杂,因此即使是简单的任务(例如向项目中添加新文件)也需要在其他地方进行其他更改,这不是我要做的除非对VS2010的某些集成可以跟踪这些变化,否则对它们中的任何一个都完全满意。

10
如何加快g ++的编译时间(使用大量模板时)
这个问题也许有点奇怪,但是我怎样才能加快g ++的编译时间呢?我的C ++代码大量使用boost和模板。我已经尽可能地将其移出了头文件,并使用了-j选项,但是编译(和链接)仍需要花费相当长的时间。 有没有工具可以分析我的代码并指出编译器的瓶颈?还是可以以某种方式分析运行在我的代码上的编译器?这真的很好,因为有时我会觉得我花了太多时间盯着编译器控制台日志...

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.