Questions tagged «c++»

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


5
如何在Google C ++测试框架中发送自定义消息?
我使用Google C ++测试框架对代码进行单元测试。我使用带有C ++单元测试模块的Eclipse CDT进行输出分析。 以前我使用CppUnit,它具有宏家族 CPPUNIT * _MESSAGE,可以这样称呼它: CPPUNIT_ASSERT_EQUAL_MESSAGE("message",EXPECTED_VALUE,ACTUAL_VALUE) 并允许发送自定义消息以测试输出。 有没有办法在Google测试输出中包含一些自定义文本? (最好是将消息包含到现有程序读取的数据中,以便使用Google测试进行自动单元测试的方式。)
81 c++  googletest 

6
const char *和char const *-相同吗?
据我了解,const修饰语应从右至左阅读。从中我得到: const char* 是一个指针,其char元素不能被修改,但是指针本身可以被修改,并且 char const* 是mutablechar的常量指针。 但是,以下代码出现以下错误: const char* x = new char[20]; x = new char[30]; //this works, as expected x[0] = 'a'; //gives an error as expected char const* y = new char[20]; y = new char[20]; //this works, although the pointer should be const (right?) y[0] …


12
char * vs std :: string在C ++中[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 什么时候应该使用std::string,什么时候应该使用C ++char*管理chars的数组? 似乎您应该使用char*性能(速度)是否至关重要,并且由于内存管理,您愿意接受一些冒险的业务。 还有其他情况要考虑吗?
81 c++  stl  stdstring  arrays 

10
在C ++中定义全局常量
我想在C ++中定义一个常量,以便在几个源文件中可见。我可以想象以下几种在头文件中定义它的方法: #define GLOBAL_CONST_VAR 0xFF int GLOBAL_CONST_VAR = 0xFF; 重现值的某些函数(例如int get_GLOBAL_CONST_VAR()) enum { GLOBAL_CONST_VAR = 0xFF; } const int GLOBAL_CONST_VAR = 0xFF; extern const int GLOBAL_CONST_VAR; 并在一个源文件中 const int GLOBAL_CONST_VAR = 0xFF; 选项(1)-绝对不是您要使用的选项 选项(2)-使用头文件在每个目标文件中定义变量的实例 选项(3)-在大多数情况下,IMO都被过度杀害 选项(4)-在许多情况下可能不好,因为枚举没有具体类型(C ++ 0X将增加定义类型的可能性) 因此,在大多数情况下,我需要在(5)和(6)之间进行选择。我的问题: 您更喜欢(5)或(6)? 为什么(5)可以,而(2)不能?
81 c++ 

4
声明变量有两种类型:“ int char”
我是C ++初学者,正在阅读Bjarne Stroustrup的《编程:使用C ++的原理和实践》。 在关于3.9.2不安全转换的部分中,作者提到了 当初始值设定项是整数文字时,编译器可以检查实际值并接受不暗示变窄的值: int char b1 {1000}; // error: narrowing (assuming 8-bit chars) 我为这个宣言感到困惑。它使用两种类型(int和char)。我以前从未在Java和Swift中看到过这样的声明(我相对熟悉的两种语言)。这是拼写错误还是有效的C ++语法?

8
用黄金代替ld-有经验吗?
有没有人尝试使用gold代替ld? gold 有望比更快ld,因此它可以帮助加快大型C ++应用程序的测试周期,但是可以用作ld的直接替代品吗? 可以gcc/g++直接呼叫gold。吗? 是否有任何已知的错误或问题? 尽管gold已经有一段时间成为GNU binutils的一部分了,但我在网络上几乎找不到“成功案例”甚至“ Howtos”。 (更新:添加了指向黄金的链接和解释它的博客条目)


6
为什么一次不自动假定#pragma?
告诉编译器只包含一次文件有什么意义?默认情况下是否有意义?甚至没有理由多次包含一个文件吗?为什么不只是假设呢?与特定的硬件有关吗?
81 c++  c  pragma 

11
为什么首选uint32_t而不是uint_fast32_t?
似乎uint32_t比uint_fast32_t(我意识到这是轶事证据)更普遍。不过,这对我来说似乎违反直觉。 几乎总是在我看到实现使用时uint32_t,它真正想要的是一个整数,最多可以容纳4,294,967,295(通常在65,535和4,294,967,295之间的下限)。 然后使用似乎很奇怪uint32_t,因为不需要“完全32位”保证,而“最快可用> = 32位”保证uint_fast32_t似乎是正确的主意。而且,尽管通常会实现它,uint32_t但实际上并不能保证它存在。 那么,为什么会uint32_t优先呢?它是更容易为人所知,还是在技术上有其他优势?
81 c++  c  int 


7
为什么堆栈内存大小如此有限?
在堆上分配内存时,唯一的限制是可用RAM(或虚拟内存)。它使Gb的内存。 那么,为什么堆栈大小如此有限(大约1 Mb)呢?什么技术原因阻止您在堆栈上创建非常大的对象? 更新:我的意图可能不清楚,我不想在堆栈上分配大对象,也不需要更大的堆栈。这个问题仅仅是出于好奇。

8
使用char *作为std :: map中的键
我试图弄清楚为什么下面的代码不起作用,并且我假设使用char *作为键类型是一个问题,但是我不确定如何解决它或为什么它会发生。我使用的所有其他功能(在HL2 SDK中)都在使用,char*因此使用std::string会引起很多不必要的麻烦。 std::map<char*, int> g_PlayerNames; int PlayerManager::CreateFakePlayer() { FakePlayer *player = new FakePlayer(); int index = g_FakePlayers.AddToTail(player); bool foundName = false; // Iterate through Player Names and find an Unused one for(std::map<char*,int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it) { if(it->second == NAME_AVAILABLE) { // We found an Available …
81 c++  map  stdmap 


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.