Questions tagged «c++»

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

1
##(双哈希)在预处理程序指令中做什么?
#define DEFINE_STAT(Stat) \ struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; 上面的内容摘自Unreal 4,我知道我可以在虚幻的论坛上提出这个问题,但是我认为这是一个一般的C ++问题,值得在这里提出。 我知道第一行定义了一个宏,但是我并不精通C ++中的预处理器恶作剧,所以我迷路了。逻辑告诉我反斜杠表示声明继续到下一行。 FThreadSafeStaticStat看起来有点像模板,但是里面有#的代码,而且是我在C ++中从未见过的语法 有人可以告诉我这是什么意思吗?我了解您可能无法使用Unreal 4,但这只是我不了解的语法。


4
令人困惑的模板错误
我一直在玩clang,我偶然发现了“ test / SemaTemplate / dependent-template-recover.cpp”(在clang发行版中),它应该提供从模板错误中恢复的提示。 可以很容易地将整个过程简化为一个最小的示例: template<typename T, typename U, int N> struct X { void f(T* t) { // expected-error{{use 'template' keyword to treat 'f0' as a dependent template name}} t->f0<U>(); } }; c发出的错误消息: tpl.cpp:6:13: error: use 'template' keyword to treat 'f0' as a dependent template name t->f0<U>(); …
91 c++  templates  llvm  clang 


4
未定义对静态成员的引用
我正在使用交叉编译器。我的代码是: class WindowsTimer{ public: WindowsTimer(){ _frequency.QuadPart = 0ull; } private: static LARGE_INTEGER _frequency; }; 我收到以下错误: 未定义对WindowsTimer :: _ frequency的引用 我也尝试将其更改为 LARGE_INTEGER _frequency.QuadPart = 0ull; 要么 static LARGE_INTEGER _frequency.QuadPart = 0ull; 但我仍然遇到错误。 谁知道为什么?

11
是否具有在C / C ++中复制数组的功能?
我是一名学习C / C ++的Java程序员。所以我知道Java具有类似System.arraycopy();的功能。复制数组。我想知道在C或C ++中是否有一个函数可以复制数组。我只能通过使用for循环,指针等来找到复制数组的实现。有可以用来复制数组的函数吗?
91 c++  c  arrays 

10
if语句-短路评估与可读性
有时,一条if语句可能相当复杂或冗长,因此,为了便于阅读,最好在之前提取复杂的调用if。 例如: if (SomeComplicatedFunctionCall() || OtherComplicatedFunctionCall()) { // do stuff } 进入这个 bool b1 = SomeComplicatedFunctionCall(); bool b2 = OtherComplicatedFunctionCall(); if (b1 || b2) { //do stuff } (提供的示例并没有那么糟糕,它只是为了说明……想象一下具有多个参数的其他调用,等等。) 但是通过这种提取,我失去了短路评估(SCE)。 我真的每次都会失去SCE吗?在某些情况下,允许编译器“对其进行优化”并仍然提供SCE吗? 有没有办法在不丢失SCE的情况下提高第二个片段的可读性?




2
这是什么 (( ))?
浏览gcc编译器源代码(gcc / c-family / c-pragma.c)时,我看到: typedef struct GTY(()) align_stack { int alignment; tree id; struct align_stack * prev; } align_stack; 而且不管我后面有多少C编程年限,这些位:(())我还完全不知道。有人可以解释一下什么意思吗?Google似乎找不到它。
90 c++  c 

16
我听说i ++不是线程安全的,++ i是线程安全的吗?
我听说i ++不是线程安全的语句,因为在汇编中,i ++减少了将原始值存储为temp的某个地方,然后递增它,然后替换它,这可能会被上下文切换中断。 但是,我想知道++ i。据我所知,这将减少为单个汇编指令,例如“ add r1,r1、1”,并且由于它只是一条指令,因此上下文切换将不会中断该指令。 谁能澄清?我假设正在使用x86平台。
90 c++  c  multithreading 

9
std :: map插入还是std :: map查找?
假设要在其中保留现有条目的地图。20%的时间,您要插入的条目是新数据。使用返回的迭代器执行std :: map :: find然后进行std :: map :: insert有好处吗?还是尝试插入然后根据迭代器是否指示记录已插入而采取行动来更快?
90 c++  optimization  stl  stdmap 

3
<random>在Linux中生成相同的数字,但在Windows中生成相同的数字
下面的代码用于在间隔[1,100]中生成五个伪随机数的列表。我为default_random_enginewith设置了种子time(0),它以unix时间返回系统时间。当我使用Microsoft Visual Studio 2013在Windows 7上编译并运行该程序时,它会按预期运行(请参阅下文)。但是,当我在Arch Linux中使用g ++编译器执行此操作时,它的行为就很奇怪。 在Linux中,每次将生成5个数字。每次执行后4个数字将有所不同(通常是这样),但第一个数字将保持不变。 Windows和Linux上5次执行的示例输出: | Windows: | Linux: --------------------------------------- Run 1 | 54,01,91,73,68 | 25,38,40,42,21 Run 2 | 46,24,16,93,82 | 25,78,66,80,81 Run 3 | 86,36,33,63,05 | 25,17,93,17,40 Run 4 | 75,79,66,23,84 | 25,70,95,01,54 Run 5 | 64,36,32,44,85 | 25,09,22,38,13 更令人迷惑的是,在Linux上,第一个数字会定期增加一个。获得上述输出后,我等待了大约30分钟,然后再次尝试发现第一个数字已更改,现在始终生成为26。它一直定期递增1,现在为32。它似乎对应随着价值的变化time(0)。 为什么第一个数字在每次运行中很少改变,然后又增加1? 代码。它整齐地打印出5个数字和系统时间: #include &lt;iostream&gt; #include …

6
错误:free():下一个大小无效(快速):
我遇到的这个奇怪的错误是什么?我正在Ubuntu 10.10上使用g ++编译C ++。当我运行可执行文件时,它会随机弹出(可能在8个小时内出现2次,每小时编译10次)。但是,如果我进行清理并重新编译,则大多数情况下都不会使用它。 *** glibc detected *** ./emailQueue.app: free(): invalid next size (fast): 0x0000000001c40270 *** ======= Backtrace: ========= /lib/libc.so.6(+0x774b6)[0x7f490d95e4b6] /lib/libc.so.6(cfree+0x73)[0x7f490d964c83] ./emailQueue.app[0x401f47] /lib/libc.so.6(__libc_start_main+0xfe)[0x7f490d905d8e] ./emailQueue.app[0x401cc9] ======= Memory map: ======== 00400000-0040d000 r-xp 00000000 08:01 1311132 /home/server/Projects/email/emailQueue.app 0060d000-0060e000 r--p 0000d000 08:01 1311132 /home/server/Projects/email/emailQueue.app 0060e000-0060f000 rw-p 0000e000 08:01 1311132 /home/server/Projects/email/emailQueue.app 01c40000-01c82000 rw-p 00000000 00:00 …
90 c++  g++ 

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.