Questions tagged «c++»

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

8
如何处理“有符号/无符号不匹配”警告(C4018)?
我使用大量用C ++编写的计算代码,同时考虑了高性能和低内存开销。它大量使用STL容器(大部分是vector),并且几乎在每个函数中都对该容器进行迭代。 迭代代码如下所示: for (int i = 0; i < things.size(); ++i) { // ... } 但它会产生有符号/无符号不匹配警告(在Visual Studio中为C4018)。 int用某种unsigned类型替换是一个问题,因为我们经常使用OpenMP编译指示,并且要求计数器为int。 我将禁止显示(数百个)警告,但是恐怕我错过了一些优雅的解决方案。 关于迭代器。我认为,迭代器在适当的地方使用时很棒。我正在使用的代码将永远不会将随机访问容器更改为list某种东西(因此进行迭代int i已经与容器无关),并且将始终需要当前索引。而且,您需要键入的所有其他代码(迭代器本身和索引)只会使事情变得复杂,并且混淆了底层代码的简单性。
80 c++  refactoring 


7
C ++异常:抛出std :: string
当我的C ++方法遇到奇怪的东西并且无法恢复时,我想抛出一个异常。可以扔一个std::string指针吗? 这是我期待做的事情: void Foo::Bar() { if(!QueryPerformanceTimer(&m_baz)) { throw new std::string("it's the end of the world!"); } } void Foo::Caller() { try { this->Bar(); // should throw } catch(std::string *caught) { // not quite sure the syntax is OK here... std::cout << "Got " << caught << std::endl; } }
80 c++  exception  stl 

5
在C ++中的类声明中初始化const成员
在PHP和C#中,可以在声明常量时对其进行初始化: class Calendar3 { const int value1 = 12; const double value2 = 0.001; } 我有一个函子的以下C ++声明,该声明与另一个类一起用于比较两个数学向量: struct equal_vec { bool operator() (const Vector3D& a, const Vector3D& b) const { Vector3D dist = b - a; return ( dist.length2() <= tolerance ); } static const float tolerance = 0.001; }; …
80 c++  g++ 

15
在C ++中是否有生产就绪的无锁队列或哈希实现?
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 2年前关闭。 改善这个问题 对于C ++中的无锁队列,我已经进行了大量的搜索。我找到了一些代码和一些试验-但是没有什么我能编译的。无锁哈希也将是受欢迎的。 摘要:到目前为止,我还没有肯定的答案。没有“生产就绪”库,令人惊讶的是,现有的库都不符合STL容器的API。
80 c++  stl  lock-free 

11
将int转换为ASCII字符
我有 int i = 6; 而且我要 char c = '6' 通过转换。有什么简单的建议吗? 编辑: 我也需要生成一个随机数,并将其转换为char,然后添加“ .txt”并在ifstream中访问它。
80 c++  c  ascii 

3
了解std :: hardware_destructive_interference_size和std :: hardware_constructive_interference_size
添加了C ++ 17std::hardware_destructive_interference_size和std::hardware_constructive_interference_size。首先,我认为这只是获得L1缓存行大小的一种可移植的方法,但这过于简单了。 问题: 这些常量与L1缓存行大小有何关系? 有没有一个很好的例子来说明他们的用例? 两者都被定义static constexpr。如果生成二进制文件并在具有不同缓存行大小的其他计算机上执行二进制文件,这不是问题吗?当您不确定代码将在哪台计算机上运行时,如何在这种情况下防止错误共享?




10
如何在C ++中从cin读取直到EOF
我正在编写一个程序,该程序直接从用户输入中读取数据,并且想知道如何(无循环)从标准输入中读取所有数据直到EOF。我正在考虑使用cin.get( input, '\0' )但'\0'不是真正的EOF字符,它会一直读取到EOF或EOF '\0',以先到者为准。 还是使用循环是唯一的方法?如果是这样,最好的方法是什么?
79 c++  input  iostream 

12
基本枚举类继承
有没有一种模式可以让我从C ++中的另一个枚举继承? 像这样: enum eBase { one=1, two, three }; enum eDerived: public eBase { four=4, five, six };
79 c++  enums 

4
多行预处理器宏
如何使多行预处理器宏?我知道如何写一行: #define sqr(X) (X*X) 但我需要这样的东西: #define someMacro(X) class X : public otherClass { int foo; void doFoo(); }; 我怎样才能使它工作? 这只是一个例子,实际的宏可能很长。
79 c++  c  c-preprocessor 

6
允许编译器优化掉局部volatile变量吗?
是否允许编译器对此进行优化(根据C ++ 17标准): int fn() { volatile int x = 0; return x; } 对此吗? int fn() { return 0; } 如果是,为什么?如果没有,为什么不呢? 关于此主题的一些思考:当前的编译器将其编译fn()为放置在堆栈中的局部变量,然后将其返回。例如,在x86-64上,gcc创建以下代码: mov DWORD PTR [rsp-0x4],0x0 // this is x mov eax,DWORD PTR [rsp-0x4] // eax is the return register ret 现在,据我所知,标准并没有说应该将局部volatile变量放入堆栈中。因此,此版本同样不错: mov edx,0x0 // this is x mov …

11
结果括号是否在return语句中有意义?
函数内部的这两个语句之间有区别吗? bool returnValue = true; // Code that does something return(returnValue); 还有这个? bool returnValue = true; // Code return returnValue; 前者周围有括号returnValue。
79 c++  c  semantics 

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.