Questions tagged «c++»

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


6
C ++中的异常真的很慢吗
我正在看C ++中的系统错误处理-Andrei Alexandrescu他声称C ++中的异常非常慢。 对于C ++ 98来说仍然如此吗?
98 c++ 

4
通过“ tuple”和“ tie”实现比较运算符,好主意吗?
(注:tuple和tie可以从升压或C ++ 11获得。) 当只有两个元素编写小结构,我有时往往选择std::pair,因为所有重要的东西是该数据类型已经完成,像operator<严格弱排序。 缺点是几乎没有用的变量名。即使我自己创建了那个typedef,也不会在两天后记住确切的first含义second,尤其是当它们属于同一类型时。对于两个以上的成员,情况变得更糟,因为嵌套pair非常糟糕。 另一个选择是tuple,无论是Boost还是C ++ 11,但看起来并没有更好和更清晰。因此,我自己开始编写结构,包括所有需要的比较运算符。 由于特别operator<麻烦,我想到了仅依靠为定义的操作来规避整个混乱tuple: 的示例operator<,例如用于严格弱排序: bool operator<(MyStruct const& lhs, MyStruct const& rhs){ return std::tie(lhs.one_member, lhs.another, lhs.yet_more) < std::tie(rhs.one_member, rhs.another, rhs.yet_more); } (从传递的参数中引用tie一个。) tupleT& 编辑:从@DeadMG私下继承的建议tuple不是一个坏建议,但是它有很多缺点: 如果操作员是独立的(可能是朋友),我需要公开继承 通过强制转换,operator=可以轻松绕过我的函数/运算符(特别是) 有了tie解决方案,我可以省去某些成员,如果他们对订购无所谓 我需要考虑此实现中的任何缺点吗?

15
std :: string浮动或加倍
我正在尝试转换std::string为float/double。我试过了: std::string num = "0.6"; double temp = (double)atof(num.c_str()); 但是它总是返回零。还有其他方法吗?
98 c++ 




2
防止函数使用const std :: string&接受0
值一千字: #include<string> #include<iostream> class SayWhat { public: SayWhat& operator[](const std::string& s) { std::cout<<"here\n"; // To make sure we fail on function entry std::cout<<s<<"\n"; return *this; } }; int main() { SayWhat ohNo; // ohNo[1]; // Does not compile. Logic prevails. ohNo[0]; // you didn't! this compiles. return 0; } 将数字0传递给接受字符串的方括号运算符时,编译器不会抱怨。相反,它会在输入以下方法之前编译并失败: …

14
为什么要避免铸造?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 改善这个问题 通常我会尽可能避免转换类型,因为我认为这是不良的编码实践,并且可能会导致性能下降。 但是,如果有人要我解释为什么会这样,我可能会像头灯中的鹿一样看着它们。 那么,为什么/何时铸造不好? 它对于Java,C#,C ++是通用的,还是每个不同的运行时环境都按照自己的方式处理? 欢迎使用任何语言的细节,例如为什么在c ++中不好?
97 c#  java  c++  casting 

4
如何使用QueryPerformanceCounter?
我最近决定将Timer类的使用时间从毫秒更改为微秒,经过研究后,我认为QueryPerformanceCounter可能是我最安全的选择。(关于Boost::Posix它可能无法在Win32 API 上运行的警告让我有点失望)。但是,我不太确定如何实现它。 我正在做的是调用GetTicks()我正在使用的任何esque函数,并将其分配给Timer的startingTicks变量。然后要找到经过的时间,我只需从中减去函数的返回值startingTicks,并在重置计时器时再次调用该函数并为其分配startingTicks。不幸的是,从代码中我已经看到它并不像调用那样简单QueryPerformanceCounter(),而且我不确定应该作为参数传递什么。
97 c++  windows  timer 

7
具有名为main而不是main函数的全局变量的程序如何工作?
考虑以下程序: #include <iostream> int main = ( std::cout << "C++ is excellent!\n", 195 ); 使用Windows 7 OS上的g ++ 4.8.1(mingw64),程序可以编译并正常运行,并进行打印: C ++很棒! 到控制台。main似乎是全局变量而不是函数;没有功能,该程序如何执行main()?此代码是否符合C ++标准?程序的行为是否定义明确?我也使用了该-pedantic-errors选项,但是程序仍然可以编译并运行。



11
函数过早返回的效率
作为一个缺乏经验的程序员,我经常遇到这种情况,尤其是对于我要优化的一个雄心勃勃,速度密集的项目,我感到特别奇怪。对于主要的类C语言(C,objC,C ++,Java,C#等)及其常用的编译器,这两个函数是否会同样高效地运行?编译后的代码有什么区别吗? void foo1(bool flag) { if (flag) { //Do stuff return; } //Do different stuff } void foo2(bool flag) { if (flag) { //Do stuff } else { //Do different stuff } } 基本上来说,提早break或return提早有过直接的效率红利/罚金吗?堆栈框架如何参与?是否有优化的特殊情况?是否有任何因素(例如内联或“内容”的大小)会对此产生重大影响? 我一直支持通过次要优化来提高可读性(我在参数验证中经常看到foo1),但是这种情况经常出现,因此我想一劳永逸地抛开所有烦恼。 而且我知道过早优化的陷阱...呃,那是一些痛苦的回忆。 编辑:我接受了一个答案,但是EJP的答案非常简洁地解释了为什么使用a return几乎可以忽略不计(在汇编中,return到函数末尾创建一个“分支”,这非常快。分支会更改PC寄存器和可能还会影响缓存和管道,这是很小的。)特别是在这种情况下,它实际上没有任何区别,因为if/else和和都return创建了到函数末尾的相同分支。

7
C ++中的句柄是什么?
有人告诉我句柄是某种指针,但不是,它使您可以保留对对象的引用,而不是对象本身。什么是更详尽的解释?
97 c++  handle 

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.