Questions tagged «c++»

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


9
Mac版C ++ IDE [关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我使用Visual Studio教授C ++课程。我的一个学生有一台Mac,正在寻找要在他的计算机上使用的IDE。有什么好推荐的?
120 c++  macos  ide 

4
成员构造函数和析构函数调用的顺序
哦,C ++专家们,我寻求您的智慧。跟我说标准话,告诉我C ++是否保证以下程序: #include <iostream> using namespace std; struct A { A() { cout << "A::A" << endl; } ~A() { cout << "A::~" << endl; } }; struct B { B() { cout << "B::B" << endl; } ~B() { cout << "B::~" << endl; } }; struct C …
120 c++ 

2
std :: tie如何工作?
我std::tie没有考虑太多就用了。它有效,所以我刚刚接受了: auto test() { int a, b; std::tie(a, b) = std::make_tuple(2, 3); // a is now 2, b is now 3 return a + b; // 5 } 但是这个黑魔法如何工作?如何做一个临时的创建std::tie改变a和b?我发现这更有趣,因为它是库功能,而不是语言功能,因此可以肯定的是,我们可以自己实现并了解它。
120 c++  c++11  tuples 

7
转换为int vs floor
这些之间有什么区别: float foo1 = (int)(bar / 3.0); float foo2 = floor(bar / 3.0); 据我了解,两种情况都有相同的结果。编译后的代码有什么区别吗?
120 c++  c  floating-point 

8
为什么标头中包含C ++内联函数?
注意:这不是关于如何使用内联函数或它们如何工作的问题,更多的是为什么要按原样完成它们。 类成员函数的声明不需要将函数定义为inline,而只是函数的实际实现。例如,在头文件中: struct foo{ void bar(); // no need to define this as inline } 那么,为什么一类的内联函数的实现必须要在头文件?为什么不能将内联函数放在.cpp文件中?如果我尝试将内联定义放入.cpp文件中,则会出现以下错误: error LNK2019: unresolved external symbol "public: void __thiscall foo::bar(void)" (?bar@foo@@QAEXXZ) referenced in function _main 1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe : fatal error LNK1120: 1 unresolved externals

4
C ++中的额外资格错误
我有一个成员函数,定义如下: Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString); 当我编译源代码时,我得到: 错误:成员'ParseValue'上的额外限定'JSONDeserializer :::' 这是什么?如何清除此错误?
120 c++  g++  compiler-errors 

13
使用C或C ++打印调用堆栈
每当调用某个函数时,是否有任何方法可以在C或C ++的运行进程中转储调用堆栈?我想到的是这样的: void foo() { print_stack_trace(); // foo's body return } Where的print_stack_trace工作方式与callerPerl 类似。 或类似这样的东西: int main (void) { // will print out debug info every time foo() is called register_stack_trace_function(foo); // etc... } 在其中register_stack_trace_function放置某种内部断点,该断点将在每次foo调用时打印堆栈跟踪。 某些标准C库中是否存在类似的内容? 我正在使用GCC在Linux上工作。 背景 我有一个测试运行,该行为基于一些不应影响此行为的命令行开关而有所不同。我的代码有一个伪随机数生成器,我认为根据这些开关,它们会被不同地调用。我希望能够使用每组开关来运行测试,并查看每个随机数生成器的调用方式是否有所不同。
120 c++  c  linux  callstack 

22
设置的最低有效位的位置
我正在寻找一种有效的方法来确定设置为整数的最低有效位的位置,例如对于0x0FF0它将是4。 一个简单的实现是这样的: unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) { value >>= 1; ++pos; } return pos; } 有什么想法可以减少一些周期吗? (注意:这个问题是针对喜欢这种东西的人,而不是告诉我xyzoptimization是邪恶的。) [edit] 谢谢大家的想法!我也学到了其他一些东西。凉!


30
C ++性能与Java / C#
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它当前不接受新的答案或互动。 我的理解是C / C ++会生成在特定机器体系结构上运行的本机代码。相反,诸如Java和C#之类的语言在虚拟机之上运行,该虚拟机抽象出本机体系结构。从逻辑上讲,由于这一中间步骤,Java或C#似乎不可能达到C ++的速度,但是有人告诉我最新的编译器(“热点”)可以达到或什至超过此速度。 也许这更像是编译器问题,而不是语言问题,但是谁能用通俗的英语解释这些虚拟机语言中的一种比本地语言有更好的表现?
119 c#  java  c++  performance  bytecode 



3
在模板中使用内联关键字是否有意义?
由于模板是在标头中定义的,并且编译器能够确定内联函数是否有利,因此有意义吗?我听说现代编译器更了解何时内联函数,而忽略了inline提示。 编辑:我想接受两个答案,但这是不可能的。为了解决这个问题,我接受phresnel的答案,因为它获得了最多的选票,而且他在形式上是正确的,但是正如我在评论中提到的那样,从不同的角度来看,我认为Puppy和Component 10的答案也是正确的。 问题出在C ++语义上,在inline关键字和内联的情况下并不严格。phresnel说“如果要用内联写,就直接写内联”,但是实际上含义inline并不明确,因为它从其原始含义演变成一个指令,如Puppy所说,该指令“阻止对ODR违规行为的争论” 。
119 c++  templates  inline 

5
为什么在真实情况下带逗号的三元运算符只求一个表达式?
我目前正在使用C ++ Primer一书学习C ++,这本书中的练习之一是: 说明以下表达式的作用: someValue ? ++x, ++y : --x, --y 我们知道什么?我们知道,三元运算符的优先级高于逗号运算符。对于二元运算符,这很容易理解,但是对于三元运算符,我有点挣扎。对于二进制运算符,“具有更高的优先级”意味着我们可以在具有更高优先级的表达式周围使用括号,并且不会更改执行。 对于三元运算符,我将执行以下操作: (someValue ? ++x, ++y : --x, --y) 有效地产生相同的代码,这无助于我理解编译器如何对代码进行分组。 但是,通过使用C ++编译器进行测试,我知道表达式可以编译,而且我不知道:运算符本身可以代表什么。因此,编译器似乎正确地解释了三元运算符。 然后,我通过两种方式执行该程序: #include <iostream> int main() { bool someValue = true; int x = 10, y = 10; someValue ? ++x, ++y : --x, --y; std::cout << …

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.