Questions tagged «c++»

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

7
如何从POSIX文件描述符构造c ++ fstream?
我基本上是在寻找fdopen()的C ++版本。我对此进行了一些研究,这似乎是一件容易的事,但事实却很复杂。我是否出于这种信念而错过了某些东西(即确实很容易)?如果不是,是否有一个好的图书馆可以解决这个问题? 编辑:将我的示例解决方案移到一个单独的答案。


8
为什么在C ++中拆分字符串要比Python慢​​?
我正在尝试将一些代码从Python转换为C ++,以期提高速度并提高生锈的C ++技能。当一个天真的实现从标准输入读取线是在Python比C快得多++(见昨天我惊呆了这个)。今天,我终于弄清楚了如何使用合并定界符(与python的split()相似的语义)在C ++中拆分字符串,并且现在遇到了deja vu!我的C ++代码需要花费更长的时间才能完成工作(尽管昨天的课程没有那么多)。 Python代码: #!/usr/bin/env python from __future__ import print_function import time import sys count = 0 start_time = time.time() dummy = None for line in sys.stdin: dummy = line.split() count += 1 delta_sec = int(time.time() - start_time) print("Python: Saw {0} lines in {1} seconds. ".format(count, delta_sec), …


2
在C和C ++中+ =的结果是什么?
我有以下代码: #include <stdio.h> int main(int argc, char **argv) { int i = 0; (i+=10)+=10; printf("i = %d\n", i); return 0; } 如果我尝试使用gcc将其编译为C源代码,则会收到错误消息: error: lvalue required as left operand of assignment 但是,如果我使用g ++将其编译为C ++源代码,则在运行可执行文件时也不会出错: i = 20 为什么会有不同的行为?
93 c++  c 

6
extern内联有什么作用?
我知道,这inline本身就是对编译器的建议,它可以酌情决定是否内联函数,也可以生成可链接的目标代码。 我认为这样static inline做相同(可以内联或不可以内联),但是在内联时不会产生可链接的目标代码(因为没有其他模块可以链接到它)。 哪里extern inline适合图片? 假设我想用一个内联函数替换一个预处理器宏,并要求该函数内联(例如,因为它使用了应该为调用者解析但不为该调用函数解析的__FILE__和__LINE__宏)。也就是说,如果函数未内联,我想查看编译器或链接器错误。不extern inline这样做呢?(我认为,如果没有,除了坚持使用宏之外,没有其他方法可以实现此行为。) C ++和C之间有区别吗? 不同的编译器供应商和版本之间有区别吗?

2
[=]在C ++中是什么意思?
我想知道是什么[=]?这是一个简短的例子 template <typename T> std::function<T (T)> makeConverter(T factor, T offset) { return [=] (T input) -> T { return (offset + input) * factor; }; } auto milesToKm = makeConverter(1.60936, 0.0); 该代码如何与[]代替一起使用[=]? 我认为 std::function<T (T)> 是指(T)作为参数和返回类型获取的函数原型T?
93 c++  c++11  lambda 

9
如何禁用我不想编辑的第三方代码中来自gcc的未使用的变量警告?
我想知道您传递给gcc编译器的哪些开关可以关闭未使用的变量警告?我在Windows上的增强功能中遇到错误,并且我不想触摸增强功能代码: C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable] 我尝试同时使用两者-Wunused-value,-Wno-unused-value但都没有抑制上面的消息。 正确的命令是什么,这是我的编译行: g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion -Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated -IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE …

14
在C ++中将布尔转换为文本
也许这是一个愚蠢的问题,但是有什么方法可以将布尔值转换为字符串,以使1变为“ true”而0变为“ false”?我可以只使用if语句,但是很高兴知道是否可以使用语言或标准库来执行此操作。另外,我是一个学徒。:)
93 c++  string  boolean 

5
在C ++中使用assert()是不好的做法吗?
我倾向于在我的C ++代码中添加很多断言,以使调试更加容易,而又不影响发行版的性能。现在,assert是一个纯C语言宏,它没有考虑C ++机制。 另一方面std::logic_error,C ++定义了,它是在程序逻辑中有错误(因此而得名)的情况下抛出的。抛出一个实例可能是的完美,更C ++的替代方法assert。 问题是,assert与abort两者立即终止程序,而无需调用析构函数,因此跳过清理,而抛出异常手动增加了不必要的运行时成本。解决该问题的一种方法是创建一个自己的断言宏SAFE_ASSERT,该宏的工作原理与C语言的对等宏相同,但会在失败时引发异常。 对于这个问题,我可以想到三点意见: 坚持C的主张。由于该程序会立即终止,因此是否正确展开更改并不重要。同样,#define在C ++中使用s同样不好。 引发异常并将其捕获到main()中。允许代码在程序的任何状态下跳过析构函数都是一种不好的做法,必须不惜一切代价避免这样做,对终止()的调用也应避免。如果引发异常,则必须将其捕获。 引发异常并使其终止程序。 终止程序的异常是可以的,并且由于NDEBUG,这在发行版本中永远不会发生。捕获是不必要的,并且可以向公开内部代码的实现细节main()。 这个问题有明确的答案吗?有专业参考吗? 编辑:跳过析构函数当然不是不确定的行为。


4
非类型模板参数
我知道非类型模板参数应该是一个常数整数表达式。有人可以阐明为什么吗? template <std::string temp> void foo() { // ... } error C2993: 'std::string' : illegal type for non-type template parameter 'temp'. 我知道什么是常数积分表达式。不允许std::string使用上述片段中的非常量类型的原因是什么?
93 c++  templates 


10
为什么C ++不允许继承友谊?
为什么友谊在C ++中至少不能有选择地继承?我知道出于明显的原因而禁止传递性和自反性(我说这只是为了避开简单的FAQ引用答案),但是缺少一些东西使virtual friend class Foo;我感到困惑。有人知道这个决定背后的历史背景吗?友谊真的只是一种有限的黑客手段,此后又进入了一些晦涩可敬的用途吗? 编辑以澄清问题:我是在谈论以下情况,而不是 A的孩子接触B或B及其孩子都接触的情况。我也可以想象有选择地授予对朋友功能的覆盖等的访问权限。 class A { int x; friend class B; }; class B { // OK as per friend declaration above. void foo(A& a, int n) { a.x = n; } }; class D : public B { /* can't get in A w/o 'friend …

17
在整个范围内均匀生成随机数
我需要在指定的时间间隔[max; min]中生成随机数。 同样,随机数应在整个间隔内均匀分布,而不是位于特定点上。 目前,我生成为: for(int i=0; i<6; i++) { DWORD random = rand()%(max-min+1) + min; } 根据我的测试,随机数仅在一个点附近产生。 Example min = 3604607; max = 7654607; 生成的随机数: 3631594 3609293 3630000 3628441 3636376 3621404 从下面的答案中:好的,RAND_MAX是32767。我在C ++ Windows平台上。还有其他方法可以生成具有均匀分布的随机数吗?
93 c++  random 

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.