TemplHeader.h
template<typename T>
void f();
Run Code Online (Sandbox Code Playgroud)
TemplCpp.cpp
template<typename T>
void f(){
//...
}
//explicit instantation
template void f<T>();
Run Code Online (Sandbox Code Playgroud)
Main.cpp的
#include "TemplHeader.h"
extern template void f<T>(); //is this correct?
int main() {
f<char>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是正确的使用方法extern template,还是仅将此关键字用于类模板,如图2所示?
TemplHeader.h
template<typename T>
class foo {
T f();
};
Run Code Online (Sandbox Code Playgroud)
TemplCpp.cpp
template<typename T>
void foo<T>::f() {
//...
}
//explicit instantation
template class foo<int>;
Run Code Online (Sandbox Code Playgroud)
Main.cpp的
#include "TemplHeader.h"
extern template class foo<int>();
int main() {
foo<int> test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道将所有这些放在一个头文件中是好的,但如果我们在多个文件中实例化具有相同参数的模板,那么我们会得到多个相同的定义,编译器会将它们全部删除(除了一个)以避免错误.我该怎么用 …
我一直在阅读一下,当你使用placement new时,你必须手动调用析构函数.
考虑下面的代码:
// Allocate memory ourself
char* pMemory = new char[ sizeof(MyClass)];
// Construct the object ourself
MyClass* pMyClass = new( pMemory ) MyClass();
// The destruction of object is our duty.
pMyClass->~MyClass();
Run Code Online (Sandbox Code Playgroud)
据我所知,运算符delete通常会调用析构函数然后释放内存,对吧?那么我们为什么不用delete呢?
delete pMyClass; //what's wrong with that?
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我们被迫将pMyClass设置为nullptr在我们调用析构函数之后:
pMyClass->~MyClass();
pMyClass = nullptr; // is that correct?
Run Code Online (Sandbox Code Playgroud)
但是析构函数没有释放内存,对吧? 这会是内存泄漏吗?
我很困惑,你能解释一下吗?
这在C++中是可能的:
const char* ch = "hello";
Run Code Online (Sandbox Code Playgroud)
但是这样的事情是不可能的:
int* i = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
这两个char *ch和int* i是普通的指针.为什么可以char*分配多个字符而int*不能分配多个字符?
我知道我们可以使用
int x[] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
但这不是问题.
valarray类的外观的同时,以array一流的,可以请你解释我在哪里,我宁愿valarray过array反之亦然?
if(typeid(int) == typeid(const int))
cout << "Same types"<< endl;
Run Code Online (Sandbox Code Playgroud)
计划产出:
相同的类型
我错过了什么吗?这些是不同类型大声笑.
我正在尝试创建一个应该为我的轮盘程序实现一些方法的对象,但是在编译时我得到错误,std :: random_device中没有成员生成
这是一个类示例:
#include <random>
class Engine
{
public:
Engine();
int spin();
private:
std::mt19937 m_generator;
std::uniform_int_distribution<int> m_distribution;
std::random_device m_seed;
};
Engine::Engine() :
m_generator(m_seed),
m_distribution(0, 36)
{
}
int Engine::spin()
{
return m_distribution(m_generator);
}
Run Code Online (Sandbox Code Playgroud)
//现在让我们试一试
Engine eng;
for(int i = 0; i < 20; ++i)
eng.spin();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
上面的代码打开一个std头文件,代码不容易理解
这个问题可能听起来像初学者,但是当我发现这个问题时,我认为我要么是初学者,要么我的作品缺少一些东西:
int main()
{
cout << sizeof(double) << endl;
cout << sizeof(long double) << endl;
cout << DBL_DIG << endl;
cout << LDBL_DIG << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
计划产出:
8
8
15
15
我认为long double是10个字节,有18个十进制数字,而double8个字节,有15个数字,但似乎我错了.
为什么会这样?
在64位机器上使用MSVC 2010.
我想要做的是让YouCompleteMe做完成和Syntastic来检查错误,但它看起来不一致.
当YouCompleteMe被禁用时,Synatstic可以正常工作,反之亦然.但是当两者都启用时,完成不起作用,并且合成不会显示任何错误.
我需要什么配置来完成这项工作?
这是我的选择:(注意向下滚动以查看所有选项)
"
" YouCompleteMe options
"
let g:ycm_register_as_syntastic_checker = 1
"YCM will put icons in Vim's gutter on lines that have a diagnostic set.
"Turning this off will also turn off the YcmErrorLine and YcmWarningLine
"highlighting
let g:ycm_enable_diagnostic_signs = 1
let g:ycm_enable_diagnostic_highlighting = 0
let g:ycm_always_populate_location_list = 1 "default 0
let g:ycm_open_loclist_on_ycm_diags = 1 "default 1
let g:ycm_complete_in_strings = 1 "default 1
let g:ycm_collect_identifiers_from_tags_files = 1 "default 0
let g:ycm_path_to_python_interpreter = '' "default ''
let g:ycm_server_use_vim_stdout = …Run Code Online (Sandbox Code Playgroud) Windows SDK中是否有一个工具可以阻止库使用什么CRT?例如,我有一个*.lib文件,如何检查是否使用/ MDd标志或/ MT进行编译?还有如何检查dll或exe相同?这可以用dumpbin完成吗?
这是我为SIGABRT信号设置处理程序的代码,然后我调用abort()但处理程序没有被触发,而程序被中止,为什么?
#include <iostream>
#include <csignal>
using namespace std;
void Triger(int x)
{
cout << "Function triger" << endl;
}
int main()
{
signal(SIGABRT, Triger);
abort();
cin.ignore();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
计划产出:
