此代码编译,但我在Visual Studio中有运行时错误:
运行时检查失败#3 - 正在使用变量'x'而未初始化...
int x = 15;
int main()
{
int x = x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白这种行为...当我点击继续时错误框中的程序恢复,x有一个损坏的内容(比如-8556328
代替15
).
为什么这段代码没有问题,并且int数组声明得很好?
const int x = 5;
int main()
{
int x[x] = {1,2,3,4};
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在编写Google测试单元测试,我想检查一下的内容unordered_map<std::string, std::string>
是否与a相同std::map<std::string, std::string>
我认为std::equal
不会起作用,因为元素std::map
按照标准排序.订单并不重要.
我想宣布:
std::unordered_map<CString, CString> m_mapMyMap;
Run Code Online (Sandbox Code Playgroud)
但是当我构建时,我得到一个错误,告诉我标准C++没有为CString提供哈希函数,而CString有(LPCSTR)运算符.
如何正确实现CString的哈希函数?
我知道"文字"(c字符串,int或其他)存储在某处(在一个只读数据部分显然是.rodata)也许这不准确......
我想了解为什么此代码导致运行时错误:
#include <iostream>
using namespace std;
const int& foo()
{
return 2;
}
const char* bar()
{
return "Hello !";
}
int main() {
cout << foo() << endl; // crash
cout << bar() << endl; // OK
return 0;
}
Run Code Online (Sandbox Code Playgroud)
foo返回一个文字的const引用(2)为什么会导致崩溃?是存储在foo()堆栈中的整数2?
考虑这个例子:
#include <iostream>
using namespace std;
class MyClass
{
public:
~MyClass() { cout << "DTOR OK !" << endl; }
};
int main(void)
{
MyClass test();
MyClass* pTest = new MyClass();
delete pTest;
}
Run Code Online (Sandbox Code Playgroud)
为什么"DTOR OK!" 不打印两次?为什么不调用本地对象"test"的析构函数?
当析构函数是私有的时,我注意到删除pTest只有编译错误; 但不是本地对象?这里发生了什么事 ?
我正在使用CStrings(控制台应用程序)开发一个win32项目,当我想传递一个函数(strtok_s
例如)LPSTR
一个CString
带有方法的指针时,我注意到一些奇怪的东西GetBuffer()
,最后一个而不是给我一个LPSTR
,它给了我一个LPWSTR
(指向一个宽字符串的指针)... CString
应该存储8位字符不是吗?
在某些情况下,我不得不使用CStringA
例如能够使用该方法,Find()
因为CString
我的输入字符串必须是宽字符串.但在另一个项目(窗口程序)中,我没有这个问题,我怀疑标题(当我使用afxstr.h时"查找"使用普通字符串,但不能使用afxcoll.h ......)
通常我会这样做,std::string
这就是为什么我迷路了.
不MFC CMap
相比有不错的表现std::unordered_map
还是std::map
,我问这个问题,因为我打算在我公司启动一个项目,并加快我要开始发展与现有的"类似"的项目,但在最后,有MFC CMap
(哈希表映射)ans我认为使用std::unordered_map
可以增加性能.我没有找到任何与CMap
互联网相关的基准或好文章.否则,std::unordered_map
我是否必须修改哈希表的大小,CMap
以避免冲突和性能问题?
PVS-Studio给了我一个警告:
char c;
sscanf(line, "%d", &c);
Run Code Online (Sandbox Code Playgroud)
我将%d更改为%c,但这会产生一个错误,因为"c"现在包含数字的ASCII值而不是小数,所以我回到"%d".
那么什么是正确的说明符?有另一种解决方案吗?
我有这门课:
#include <unordered_map>
class MyClass
{
// Trie node class
struct Node
{
std::unordered_map<char, Node> m_children;
// ...
}; // .....
};
int main()
{
MyClass m;
}
Run Code Online (Sandbox Code Playgroud)
编译时,我得到了这个错误:
/usr/include/c++/7/bits/stl_pair.h:204:11:错误:'std :: pair <_T1,_T2> :: second'的类型不完整_T2秒; /// @c second是第二个对象的副本^ ~~~~~ AutocompleteModern.cpp:24:12:注意:'struct Autocomplete :: Node'结构节点的前向声明^ ~~~
我知道如果我在散列映射中使用指针作为值,这可能会起作用.但是我想知道是否有可能在不改变哈希映射值的类型的情况下编译上面的代码.还是不可能?
在头文件中定义全局 std::string 是否正确,如下所示:
namespace Colors
{
static const std::string s_blue = "Blue";
}
Run Code Online (Sandbox Code Playgroud)