Questions tagged «c++»

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

3
使用字符串作为打开文件路径的C ++ ifstream错误。
我有: string filename: ifstream file(filename); 编译器抱怨ifstream文件和字符串不匹配。我需要将文件名转换为其他内容吗? 这是错误: error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(std::string&)’ /usr/include/c++/4.4/fstream:454: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
71 c++  ifstream 

8
为什么C ++允许我将const char分配给const char * ?!
令我惊讶的是,它汇编为: const char* c_str() { static const char nullchar = '\0'; return nullchar; } 并且在我的代码中引入了一个错误。幸运的是,我抓住了它。 这是C ++故意还是编译器错误?是否有理由主动忽略数据类型? 它可以在Visual C ++ 2010和GCC中工作,但是鉴于明显的数据类型不匹配,我不明白为什么它应该工作。(static也没有必要。)

7
介于0和1之间的rand()
所以下面的代码使0 <r <1 r = ((double) rand() / (RAND_MAX)) 为什么 r = ((double) rand() / (RAND_MAX + 1))使-1 <r <0? 难道不应该在RAND_MAX中加1使得r <2? 编辑:我收到警告:表达式中的整数溢出 在那条线上,所以可能是问题所在。我刚刚做了cout << r << endl,它的确给了我-1和0之间的值
71 c++  random 

5
std :: set和std :: vector有什么区别?
我正在学习STL。我读了关于set容器的文章。我有什么疑问要使用set?阅读set的描述后,它似乎没有用,因为我们可以用代替它vector。您能否说说vectorvsset容器的优缺点。谢谢
71 c++  stl 

10
扩展C ++中的枚举?
C ++中有没有一种方法可以扩展/“继承”枚举? IE浏览器: enum Enum {A,B,C}; enum EnumEx : public Enum {D,E,F}; 或至少定义它们之间的转换?
71 c++  enums 

7
C ++优化器将对Clock()的调用重新排序是否合法?
C ++编程语言第4版,第225页显示:编译器可以对代码重新排序以提高性能,只要结果与简单执行顺序相同即可。某些编译器,例如处于发布模式的Visual C ++,将重新排序以下代码: #include <time.h> ... auto t0 = clock(); auto r = veryLongComputation(); auto t1 = clock(); std::cout << r << " time: " << t1-t0 << endl; 变成这种形式: auto t0 = clock(); auto t1 = clock(); auto r = veryLongComputation(); std::cout << r << " time: " …

3
用g ++编译的奇怪代码
以下代码使用g ++ 4.8.1成功编译: int main() { int(*)(); } 它看起来像一个简单的函数指针声明: int(*f)(); 它不能与clang 3.4和vc ++ 2013一起编译。 是编译器错误还是标准的暗处之一? 使用g ++ 4.8.1可以正常编译的类似奇怪代码片段的列表(已更新): int(*)(); int(*); int(*){}; int(*()); 这些奇怪代码片段的现场示例。 更新1: @Ali在注释中添加了一些有趣的信息: 所有4种情况均使用clang 3.5干线(202594)给出了编译错误,并且使用gcc 4.9干线(20140302)进行了编译。的行为与相同-std=c++98 -pedantic,但int(*){};可以理解的除外。扩展的初始化程序列表仅适用于-std=c++11。 更新2:正如@CantChooseUsernames在他的回答中指出的那样,即使没有初始化,它们仍然可以正常编译,即使没有启用任何优化,g ++也不会为它们生成任何汇编(既没有初始化也没有初始化): int(*)() = 0; int(*) = 0; int(*){} = 0; int(*()) = 0; 带有初始化的实时示例。 更新3:令我惊讶的是int(*)() = "Hello, world!";,它也int(*p)() = "Hello, …
71 c++  gcc  c++11  g++ 

20
我应该在C ++代码中使用printf吗?
我通常使用cout和cerr向控制台写入文本。但是有时我发现使用好的旧printf语句更容易。我需要格式化输出时使用它。 我将在其中使用的一个示例是: // Lets assume that I'm printing coordinates... printf("(%d,%d)\n", x, y); // To do the same thing as above using cout.... cout << "(" << x << "," << y << ")" << endl; 我知道我可以使用格式化输出,cout但我已经知道如何使用printf。有什么我不应该使用该printf语句的原因吗?
71 c++  formatting 

9
模板约束C ++
在C#中,我们可以定义一个通用类型,该通用类型对可用作通用参数的类型施加了约束。以下示例说明了通用约束的用法: interface IFoo { } class Foo<T> where T : IFoo { } class Bar : IFoo { } class Simpson { } class Program { static void Main(string[] args) { Foo<Bar> a = new Foo<Bar>(); Foo<Simpson> b = new Foo<Simpson>(); // error CS0309 } } 有没有一种方法可以对C ++中的模板参数施加约束。 C ++ …

5
为什么我得到的字符串没有命名为Error?
game.cpp #include <iostream> #include <string> #include <sstream> #include "game.h" #include "board.h" #include "piece.h" using namespace std; 游戏 #ifndef GAME_H #define GAME_H #include <string> class Game { private: string white; string black; string title; public: Game(istream&, ostream&); void display(colour, short); }; #endif 错误是: game.h:8 error: 'string' does not name a type …
71 c++  string  std 

13
为什么在C ++中更喜欢无符号签名?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 我想更好地了解为什么选择int了unsigned? 就个人而言,除非有正当理由,否则我从不喜欢带符号的值。例如,数组中的项数,字符串的长度或存储块的大小等,因此这些东西通常不可能为负数。这样的值没有可能的含义。为什么int在所有此类情况下都令人误解,还是选择它呢? 我问这个,因为这两个Bjarne的Stroustrup的和钱德勒卡鲁斯给了建议,喜欢int在unsigned 这里(大约12:30' )。 我可以看到使用intovershort或long-的参数int是目标机器体系结构的“最自然的”数据宽度。 但是无人签名总是让我很烦。在典型的现代CPU架构上,带符号的值是否真的更快?是什么使它们更好?
71 c++  optimization 


15
使用Boost读写XML文件
使用Boost来读写XML文件有什么好的方法(也是一种简单的方法)? 我似乎找不到任何简单的示例来使用Boost读取XML文件。您能指出一个使用Boost读写XML文件的简单示例吗? 如果没有Boost,是否有任何您可以推荐的良好简单的库来读写XML文件?(必须是C ++库)
71 c++  xml  boost 

2
为什么编译器将“ char”匹配为“ int”而不是“ short”?
我有一个小程序: #include<iostream> using namespace std; void f(int) { cout << "int\n"; } void f(short) { cout << "short\n"; } int main(void){ char c = 0; f(c); return 0; } 它打印int。我觉得,如果这是因为“整数提升”,为什么不是short首选? 我也知道整数提升发生在表达式中(例如A = B)。但是我没有表达对f(),权利的呼吁吗? 如果这是关系到重载解决规则,为什么传递char到F将导致到编译器宁愿int到short? 如果我删除的f(int)话f(c)会打电话给f(short)! 因此,总而言之,我的问题是,它与“整数提升”还是“过载解决规则”有关?又为什么呢


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.