Questions tagged «c++»

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

9
内联函数中的静态变量
我有一个在头文件中声明和定义的函数。这本身就是一个问题。如果未内联该函数,则使用该标头的每个翻译单元都将获得该函数的副本,并且当它们链接在一起时,它们将被复制。我通过使函数内联来“修复”该问题,但恐怕这是一个脆弱的解决方案,因为据我所知,即使指定了“ inline”关键字,编译器也不保证内联。如果不是这样,请纠正我。 无论如何,真正的问题是,此函数内的静态变量会发生什么?我最终得到多少份?

10
与C ++的#region等效
#region与C ++的C ++等效是什么,因此我可以放入自定义代码可折叠位,并使代码更易于阅读?
83 c#  c++ 

6
new int;中的new是操作符吗?
new int;in等表达式int * x = new int;是一个新表达式。术语“新运算符”似乎可以与“新表达式”互换使用,例如在以下问题中:“新运算符”和“新运算符”之间的区别? 说new在新表达式中使用的关键字是运算符是否正确?为什么或者为什么不? 如果不是,是否有另一个理由来调用新表达式“ new operator”? 我很难找到构成操作员的权威定义。 我已经了解了为对象分配内存的new运算符和最终可能会调用的“ new expression”之间的区别operator new。

2
std :: is_function如何实现?
以下是如何实现的std::is_function? template<class T> struct is_function : std::integral_constant< bool, !std::is_const<const T>::value && !std::is_reference<T>::value > {}; (来自CPP参考) 在我看来,int在此定义下,an 将是一个函数。我想念什么?
82 c++  templates  std  sfinae 

10
在主函数中重命名argc和argv是否安全?
许多程序使用标准名称来表示许多参数和字符串数组。主要功能外观的原型,如:int main(int argc, char *argv[]);。但是,如果我为这些变量选择自定义名称,我会破坏某些东西吗? 例如 int main(int n_of_args, char *args[]); 在编译器的上下文中,一切都很好。这些变量是main函数的局部变量,因此可以有任何名称。而且简单的代码可以完美地构建和运行。但是这些名称可以由预处理器使用。因此,重命名这些参数是否安全? PS我个人觉得这些名字不好,因为它们看起来很相似,只有一个字母不同。但是每个人出于某种原因使用它们。
82 c++  c  main 

3
此C ++功能的名称是什么?
我在编写一些C ++代码,但错误地省略了函数的名称WSASocket。但是,我的编译器没有引发错误,SOCKET而是将my与整数值1而不是有效的套接字相关联。 有问题的代码应该看起来像这样: this->listener = WSASocket(address->ai_family, address->ai_socktype, address->ai_protocol, NULL, NULL, WSA_FLAG_OVERLAPPED); 但是,它看起来像这样: this->listener = (address->ai_family, address->ai_socktype, address->ai_protocol, NULL, NULL, WSA_FLAG_OVERLAPPED); 来自其他语言,这看起来可能是某种匿名类型。如果功能确实是功能,名称是什么? 目的是什么? 当您不知道从哪里开始时,很难进行搜索。
82 c++ 

7
使用shared_ptr的例子?
嗨,我今天问一个问题,关于如何在同一向量数组中插入不同类型的对象,我在该问题中的代码是 gate* G[1000]; G[0] = new ANDgate() ; G[1] = new ORgate; //gate is a class inherited by ANDgate and ORgate classes class gate { ..... ...... virtual void Run() { //A virtual function } }; class ANDgate :public gate {..... ....... void Run() { //AND version of Run } …

4
为什么新的随机库比std :: rand()好?
因此,我看到了一个名为rand()认为有害的演讲,该演讲提倡在简单std::rand()加模范范式上使用随机数生成的引擎分布范式。 但是,我想看看std::rand()第一手的失败,所以我做了一个快速实验: 基本上,我编写了2个函数getRandNum_Old(),分别getRandNum_New()使用std::rand()和std::mt19937+生成了一个介于0和5之间(含0和5)的随机数std::uniform_int_distribution。 然后,我使用“旧”方式生成了960,000(可被6整除)随机数,并记录了数字0-5的频率。然后,我计算了这些频率的标准偏差。我要寻找的是尽可能低的标准偏差,因为如果分布真正均匀,就会发生这种情况。 我对该模拟运行了1000次,并记录了每个模拟的标准偏差。我还记录了所花费的时间(以毫秒为单位)。 之后,我再次进行了完全相同的操作,但是这次以“新”方式生成随机数。 最后,我计算了旧方法和新方法的标准差列表的均值和标准差,以及新方法和旧方法的时间列表的均值和标准差。 结果如下: [OLD WAY] Spread mean: 346.554406 std dev: 110.318361 Time Taken (ms) mean: 6.662910 std dev: 0.366301 [NEW WAY] Spread mean: 350.346792 std dev: 110.449190 Time Taken (ms) mean: 28.053907 std dev: 0.654964 出人意料的是,两种方法的面包卷总撒布相同。即,std::mt19937+std::uniform_int_distribution不是简单std::rand()+的“统一” %。我所做的另一项观察是,新方法比旧方法慢大约4倍。总体而言,似乎我付出了巨大的速度代价,却几乎没有质量上的提高。 我的实验有某种缺陷吗?还是std::rand()真的不是那么糟糕,甚至更好? 作为参考,这是我完整使用的代码: #include <cstdio> #include <random> #include <algorithm> …
82 c++  c++11  random 

2
几乎无限的“ for”循环
我目前正在调试一些代码,并且遇到了这一行: for (std::size_t j = M; j <= M; --j) (由正在度假的老板写的。) 在我看来真的很奇怪。 它有什么作用?在我看来,这就像一个无限循环。
82 c++ 

5
当我“扔”东西时,它在哪里存储在内存中?
我知道当thrown为n时,堆栈将被“解卷”到被捕获的位置,并且在每个函数上下文中运行堆栈上的类实例的析构函数(这就是为什么您不应该从析构函数中引发异常) -您可能最终会抛出第二个)。但是我想知道发生这种情况时,我抛出的对象存储在内存中的什么位置? 是否依赖于实现?如果是这样,大多数流行的编译器是否使用特定的方法?

3
调用pthread_cond_signal而不锁定互斥锁
我读到某个地方,我们应该在调用pthread_cond_signal之前锁定互斥锁,并在调用它之后解锁mutext: pthread_cond_signal()例程用于发信号(或唤醒)另一个正在等待条件变量的线程。它应该在互斥锁锁定后调用,并且必须解锁互斥锁才能完成pthread_cond_wait()例程。 我的问题是:在不锁定互斥锁的情况下调用pthread_cond_signal或pthread_cond_broadcast方法是否可以?

12
用C或C ++返回结构是否安全?
我的理解是不应该这样做,但是我相信我已经看过了类似示例的示例(注意,代码在语法上不一定正确,但思想确实存在) typedef struct{ int a,b; }mystruct; 然后是一个功能 mystruct func(int c, int d){ mystruct retval; retval.a = c; retval.b = d; return retval; } 我了解,如果我们想执行以下操作,则应始终返回指向malloc结构的指针,但我很肯定看到了执行此操作的示例。它是否正确?就我个人而言,我总是返回指向malloc的结构的指针,或者只是通过对该函数的引用进行传递并在那里修改值。(因为我的理解是,一旦函数的作用域结束,用于分配结构的任何堆栈都将被覆盖)。 让我们在问题中添加第二部分:这是否因编译器而异?如果可以,那么最新版本的台式机编译器(gcc,g ++和Visual Studio)的行为是什么? 有什么想法吗?


3
如何声明一个接受lambda的函数?
我在互联网上阅读了许多教程,这些教程解释了如何在标准库(例如std::find)中使用lambda ,它们都很有趣,但是我找不到任何可以解释如何将lambda用于自己的函数的教程。 例如: int main() { int test = 5; LambdaTest([&](int a) { test += a; }); return EXIT_SUCCESS; } 我该如何申报LambdaTest?它的第一个参数是什么类型?然后,如何调用传递给它的匿名函数-例如,以“ 10”作为参数?
82 c++  lambda  c++11 

2
仅扩展为其参数的PROTOTYPE宏有什么意义?
我有一个头文件,其中包含 #define PROTOTYPE(s) s 这有什么意义呢?似乎它将只是用其自身替换输入。 周围还有其他大量指令,但只有一个指令似乎被检查了是否定义:#ifndef PROTOTYPE。我在HDF4头文件中找到了执行以下操作的位置:#define PROTOTYPE。因此,这些都不能真正解决我的问题。似乎还是没用的。 使用方法如下: CS_RETCODE clientmsg_callback PROTOTYPE(( CS_CONTEXT * context, CS_CONNECTION *connection, CS_CLIENTMSG *clientmsg)); 这是使用Sybase Open Client的项目的一部分。clientmsg_callback稍后在这里使用: ct_callback(context, NULL, CS_SET, CS_CLIENTMSG_CB, (CS_VOID *)clientmsg_callback); 我将从这里开始一个示例程序: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc35570.1570/html/clcprgde/clcprgde10.htm clientmsg_callback稍后实现。我认为该示例最初是考虑到C而不是C ++编写的。也许与它有关?
82 c++  macros 

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.