Questions tagged «c++»

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

6
C ++中的'typeid'与'typeof'
我想知道C ++ typeid和typeofC ++ 之间的区别是什么。这是我所知道的: typeid是在C ++头文件typeinfo中定义的type_info文档中提到的 。 typeof在C的GCC扩展和C ++ Boost库中定义。 另外,这是我在发现typeid未返回预期结果的地方创建的测试代码test 。为什么? main.cpp #include <iostream> #include <typeinfo> //for 'typeid' to work class Person { public: // ... Person members ... virtual ~Person() {} }; class Employee : public Person { // ... Employee members ... }; int main () …
159 c++  typeof  typeid 

5
我对值初始化的尝试被解释为函数声明,为什么不使用a(());?解决这个问题?
Stack Overflow教给我的很多东西是所谓的“最令人烦恼的解析”,经典地用诸如 A a(B()); //declares a function 虽然在大多数情况下直观上似乎是a类型对象的声明A,以一个临时B对象作为构造函数参数,但实际上它是一个函数的声明,a返回a A,并带一个指向该函数的指针,该指针返回B而本身不带任何参数。同样的线 A a(); //declares a function 也属于同一类别,因为它声明了一个函数而不是对象。现在,在第一种情况下,此问题的通常解决方法是在周围添加额外的括号/括号B(),因为编译器随后会将其解释为对象的声明。 A a((B())); //declares an object 但是,在第二种情况下,执行相同操作会导致编译错误 A a(()); //compile error 我的问题是,为什么?是的,我非常清楚正确的“解决方法”是将其更改为A a;,但是我很好奇()在第一个示例中该编译器的额外功能是什么,然后在重新应用该功能时不起作用第二个例子。A a((B()));解决方法是否已将特定例外写入标准?
158 c++ 

6
__FILE __,__ LINE__和__FUNCTION__在C ++中的用法
假设您的C ++编译器支持它们,是否有任何特定的原因不使用__FILE__,__LINE__以及__FUNCTION__出于日志记录和调试的目的? 我主要关心的是为用户提供误导性数据,例如,由于优化而报告错误的行号或功能,或者因此而导致性能下降。 基本上,我可以信任__FILE__,__LINE__并__FUNCTION__以永远做正确的事?

4
如何从C ++中的void函数退出?
如果它是void函数,如何过早退出函数而不返回值?我有一个void方法,如果某个条件为true,则无需执行其代码。我真的不想更改实际返回值的方法。
158 c++ 

9
为什么从非空函数的末尾流出而不返回值不会产生编译器错误?
自从我多年前意识到,默认情况下不会产生错误(至少在GCC中),我一直想知道为什么? 我知道您可以发出编译器标志来产生警告,但是它不总是错误吗?对于非void函数不返回有效值,为什么有意义? 评论中要求的示例: #include <stdio.h> int stringSize() { } int main() { char cstring[5]; printf( "the last char is: %c\n", cstring[stringSize()-1] ); return 0; } ...编译。
158 c++  c  gcc  g++ 

14
仅接受某些类型的C ++模板
在Java中,您可以定义仅接受扩展您选择的类的类型的通用类,例如: public class ObservableList<T extends List> { ... } 这是使用“ extends”关键字完成的。 在C ++中,是否有与此关键字等同的简单名称?
158 c++  templates 

4
成员函数中的静态变量
有人可以解释一下成员函数中的静态变量如何在C ++中工作。 给定以下类别: class A { void foo() { static int i; i++; } } 如果我声明了多个实例 A,则foo()在一个实例上调用是否会i在所有实例上增加静态变量?还是只有一个被调用? 我假设每个实例都有自己的副本 i,但是逐步执行某些代码似乎并非如此。
158 c++  static  scope 

9
如何在z / OS上的C ++中使用C套接字API
我有越来越的C套接字API到正常工作的问题C++上z/OS。 尽管我包括在内sys/socket.h,但仍然收到编译时错误,告诉我这AF_INET是未定义的。 我是否遗漏了一些明显的东西,或者这与事实z/OS使我的问题变得更加复杂有关? 更新:经过进一步调查,我发现有一个#ifdef我在打。z/OS除非我定义要使用的套接字的“类型”,否则显然是不高兴的: #define _OE_SOCKETS 现在,我个人不知道这_OE_SOCKETS实际上是做什么的,因此,如果有任何z/OS套接字程序员(你们所有人中的三个)都在这里,也许您可​​以给我一个总结一下这一切的工作原理? 测试应用 #include <sys/socket.h> int main() { return AF_INET; } 编译/链接输出: cxx -Wc,xplink -Wl,xplink -o inet_test inet.C "./inet.C", line 5.16: CCN5274 (S) The name lookup for "AF_INET" did not find a declaration. CCN0797(I) Compilation failed for file ./inet.C. Object file not created. 检查sys / …
158 c++  c  sockets  mainframe  zos 

6
通过std :: map进行迭代的顺序是否已知(并由标准保证)?
我的意思是-我们知道std::map的元素是根据键排序的。因此,假设键是整数。如果从迭代std::map::begin()到std::map::end()使用for,标准是否保证我将因此依次迭代具有键的元素(按升序排序)? 例: std::map<int, int> map_; map_[1] = 2; map_[2] = 3; map_[3] = 4; for( std::map<int, int>::iterator iter = map_.begin(); iter != map_.end(); ++iter ) { std::cout << iter->second; } 是否保证可以打印234或实现定义? 现实生活中的原因:我有一个std::map带int钥匙的。在极少数情况下,我想遍历所有具有关键意义而不是具体int价值的要素。是的,听起来std::vector是更好的选择,但是请注意我的“非常罕见的情况”。 编辑:我知道,的元素std::map已排序..无需指出(对于此处的大多数答案)。我什至在我的问题中写了它。 我在遍历容器时询问迭代器和顺序。感谢@Kerrek SB的回答。
158 c++  dictionary  stl  standards 

8
如果我没有显式地初始化C ++类成员,该如何初始化?
假设我有私人承包商,客人一类ptr,name,pname,rname,crname和age。如果我自己不初始化它们会怎样?这是一个例子: class Example { private: int *ptr; string name; string *pname; string &rname; const string &crname; int age; public: Example() {} }; 然后我做: int main() { Example ex; } 成员如何在ex中初始化?指针会发生什么?做string和int获得0 intialized默认构造函数string()和int()?参考成员呢?还有const引用呢? 我还应该知道些什么? 有谁知道涵盖这些情况的教程?也许在一些书中?在大学图书馆,我可以使用很多C ++书籍。 我想学习它,以便编写更好的(无错误)程序。任何反馈将有所帮助!

13
在循环中声明变量是否有开销?(C ++)
我只是想知道如果您执行以下操作是否会降低速度或效率: int i = 0; while(i < 100) { int var = 4; i++; } 声明int var一百次。在我看来,好像会有,但我不确定。这样做会更实用/更快吗? int i = 0; int var; while(i < 100) { var = 4; i++; } 还是在速度和效率上都一样?

13
从范围生成随机整数
我需要一个函数,该函数将在给定范围内(包括边界值)生成一个随机整数。我没有不合理的质量/随机性要求,我有四个要求: 我需要它快。我的项目需要生成数百万(有时甚至数千万)的随机数,而我目前的生成器功能已被证明是瓶颈。 我需要它合理地统一(使用rand()完全可以)。 最小-最大范围可以是<0,1>到<-32727,32727>的任何值。 它必须是可播种的。 我目前有以下C ++代码: output = min + (rand() * (int)(max - min) / RAND_MAX) 问题是,它不是真正统一的-仅当rand()= RAND_MAX时才返回max(对于Visual C ++,它是1/32727)。对于像<-1,1>这样的小范围,这是一个主要问题,在该范围中几乎永远不会返回最后一个值。 所以我拿起笔和纸,想出了以下公式(该公式基于(int)(n + 0.5)整数舍入技巧): 但是它仍然不能给我均匀的分布。重复运行10000个样本后,值-1、0的比例为37:50:13.1。 你能建议更好的配方吗?(甚至整个伪随机数生成器函数)
157 c++  random 

4
C ++错误:未定义对“ clock_gettime”和“ clock_settime”的引用
我对Ubuntu相当陌生,但似乎无法使它正常工作。它可以在我的学校计算机上正常工作,我不知道自己在做什么。我检查了usr / include和time.h就好了。这是代码: #include <iostream> #include <time.h> using namespace std; int main() { timespec time1, time2; int temp; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); //do stuff here clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2); return 0; } 我正在使用CodeBlocks作为我的IDE来进行构建和运行。任何帮助都会很棒,谢谢。
157 c++  linux  ubuntu  posix  time.h 



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.