我刚刚开始学习JavaScript
/ node.js
(对后端webdev的温和介绍),因此我在这个主题中完全是绿色的.
几天前,我正在阅读一个教程,从中我学会了将机密数据(如密码)保存在config.json
文件中.
今天我发现(偶然).env
文件,我越了解它,似乎越多人使用它来实际存储密码.
所以.env
我config.json
什么时候应该使用,什么时候应该使用?
通常,当我想创建自己的异常时,我继承自std::exception
或std::runtime_error
.
是否有什么阻止我创建自己的空"标签类"?
class out_of_bounds_access {}; // or:
class memory_leak {};
Run Code Online (Sandbox Code Playgroud)
并抛出那个?
毕竟,大多数情况下,它是带有关于错误的信息的类名,而不是异常类的成员.
好的,所以我认为这是一个坏主意,但为什么呢?为什么这是一个坏主意?
PS我知道有些情况下"定制"异常带有后者用于确定解决问题的正确方法的信息......
但是,如果你考虑一下,这样的情况可能很常见(并非总是如此) ,但经常),重新完成抛出和捕获多个不同的标记类而不是只有一个(带有"内容").
我想在C ++和Python之间共享内存。
我的问题:
有什么办法可以“映射”与C ++变量相对应的内存,以便我可以从Python访问数据?我不想将6GB的数据复制到硬盘上。
每当我调用它时cudaMemPrefetchAsync()
,它都会返回错误代码cudaErrorInvalidDevice
。我确信我传递了正确的设备 ID(我的笔记本电脑中只有一个支持 CUDA 的 GPU id == 0
)。
我相信下面发布的代码示例是没有错误的,但是在行52
(调用cudaMemPrefetchAsync()
)中我不断收到此错误。
(其他的我没啥想法了)
操作系统: Microsoft Windows 8.1 x64 家庭版。
IDE: Visual studio 2015
CUDA 工具包: 8.0.61
NVIDIA GPU: GeForce GTX 960M
NVIDIA GPU 驱动程序:版本 381.65(最新)
计算能力: 5.0 (Maxwell)
统一内存支持:支持。
英特尔集成GPU:英特尔高清显卡4600
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// TEST AREA:
// -- INCLUDE:
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Cuda Libs: ( Device Side ):
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
// Std C++ Libs:
#include …
Run Code Online (Sandbox Code Playgroud) 就像在主题中一样:有没有办法从中创建用户定义的文字std::initializer_list
?
我想做那样的事情:
template <typename T> inline
std::initializer_list<T> const & operator "" _lit(std::initializer_list<T> const & list)
{
return std::move(list); // I am not sure, but this line might cause undefined behavior... well I'll think about it latter...
}
int main()
{
{ 10, 20, 30, 40 }_lit // Error: identifier '_lit' is undefined;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但似乎编译器不明白我试图打电话operator""_lit({10, 20, 30, 40});
有没有办法解决它?
编辑:
对不起,原来这只是XY问题的另一个例子......
让我详细说明
我试图"扩展"当前的C++语法(这是一个有趣的小项目...)
主要想法是简化这个:
if ((val_1 == value) && (val_2 == value) && (val_3 == value)) …
Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以确定一个对象在堆上是否至少有一个成员?
我试图能够将像std::string
or std::vector
or这样的对象std::list
(是的,主要是容器)与所有其他类型区分开来(不幸的是,即使是具有单个元素的容器也在我的“感兴趣范围”内)
我正在尝试做类似以下的事情:
struct foo
{
private:
int * _ptr;
public:
foo() : _ptr(new int) {};
~foo() { delete _ptr; };
};
struct bar
{
private:
int val;
};
template <typename T>
void func(T val)
{
if constexpr (std::is_class_v<T>)
{
std::cout << std::setw(20) << typeid(T).name() << " is a class type." << std::endl;
if (/* determine if foo has any heap allocations */)
{
// Do something #1.
std::cout << std::setw(20) << typeid(T).name() << …
Run Code Online (Sandbox Code Playgroud) 当谈到CUDA时,我完全是"新手".所以,如果我的问题是微不足道的,请原谅我.
nvcc是否理解inline
C关键字的含义?
我知道__forceinline__
,和类似的nvcc"宏",因此我不是在问如何编写inline
cuda设备端代码.
我也知道,我的代码在nvcc和c/c ++编译器之间"分开"(我正在使用Visual Studio IDE).
这是否意味着inline
当nvcc"紧挨着" __device__
或__global__
内核时,nvcc会忽略该关键字?
编辑:
PS我曾搜索过cuda编程指南.我在inline
条目下找不到任何有用的东西,类似的"标签"也无济于事.
void foo(void) {}
我有一个我希望内联的函数(让我们称之为它)。但是我在 .cpp 文件中定义了它。
我无法将该函数移动到标头,因为它正在使用 .cpp 中的其他函数。
编辑:
下面的代码就像真实的代码一样不使用 C++ 功能。我可以明确补充:
#ifdef __cplusplus
extern "C"
#endif
Run Code Online (Sandbox Code Playgroud)
如果我想将下面的代码转换为 c99,我只需要更改我的项目属性(或 makefile,如果您愿意)而不是代码。我也在询问c++,因为它可以解决我的问题,而c99不能。
因此我的问题中的 C 和 C++ 标签是合理的。代码是可移植的,
请参阅:When to use extern "C" in C++?
编辑#2
好吧,我明白我必须将foo()
定义放在头文件中。如何在不将它们移动到头文件的情况下调用func_a()
和func_b()
from ?foo()
有什么解决方法吗?
示例
文件.c/.cpp:
int func_a (int a, int b, int c) {/*...*/};
double func_b (double a, double b, double c) {/*...*/};
void foo (int a, double b) { // unction definition
//...
int myInt …
Run Code Online (Sandbox Code Playgroud) 有没有办法在运行时区分以下两种情况:
double ptr * = new double(3.14159);
double variable = 3.14159
double * testPtr_1 = ptr;
double * testPtr_2 = &variable;
delete testPtr_1 // fine...
delete testPtr_2 // BIG RUN TIME ERROR !!!
Run Code Online (Sandbox Code Playgroud)
我发现自己陷入困境,我需要调用delete
操作符来获取一些未知指针.指针可以指向任何位置(指向"本地"变量或动态分配的变量).
我怎样才能找到我的"未知"指针指向的位置,因此选择何时何时不要调用operator delete
它
编辑:
好的我看到每个人都指着智能指针,但如果我想写自己的指针怎么办?一套智能指针(这是我的问题背后的原因)?
我已阅读以下问题:
我明白什么C++ functors
是好的。但是我无法推断如果执行以下操作会发生什么:
template <typename T, unsigned int state>
class Foo {
public:
static Foo_func() { /* Do something */ };
}
// Partial specialization:
// -- state == 1
template <typename T>
class Foo <T, 1> {
public:
static Foo_func() { /* Do something */ };
}
template <typename F>
void call_func(F func) {
// Do something... //
func();
// Do something... //
}
int main() {
Foo <double, /*state*/ …
Run Code Online (Sandbox Code Playgroud) 假设我有一组以下课程:
class animal
{
// members, constructors and other methods...
public:
virtual void what_do_you_eat() { cout << "i eat generic food" << endl; }
}
class cat : public animal
{
// members, constructors and other methods...
public:
void what_do_you_eat() { cout << "i eat cat food" << endl; }
}
class dog : public animal
{
// members, constructors and other methods...
public:
void what_do_you_eat() { cout << "i eat dog food" << endl; }
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个列表(任何容器都可以,但让我们std::list<>
为这个例子选择): …
我正在尝试了解SFINAE
(我正在关注本教程),但有一些......“设计选择”我不理解,因此,我发现它们令人困惑。
假设我遇到这样的情况(包括重新实现std::enable_if
is there 只是为了演示我是如何理解的enable_if
)
// A default class (class type) declaration. Nothing unusual.
template <bool, typename T = void>
struct enable_if
{};
// A specialisation for <true, T> case. I understand 'why-s' of this.
// -- 'why-s': if I attempt to access 'enable_if<false, T>::type' (which does not exist) I will get a substitution failure and compiler will just "move-on" trying to match "other cases".
template <typename T>
struct enable_if<true, T> {
typedef …
Run Code Online (Sandbox Code Playgroud) 我有一个黑匣子类,如:
class foo
{/* body is unavailable for me to inspect */};
Run Code Online (Sandbox Code Playgroud)
foo
可以是模板。
此类是终极黑匣子;
-我对它的成员一无所知
-我对它的方法一无所知
-等等。
我正在尝试实现一个class_traits
类:
template <typename T>
class class_traits
{
// impl
}
Run Code Online (Sandbox Code Playgroud)
这将允许我执行以下操作(或至少执行类似操作)
int main()
{
cout << class_traits<foo>::member_count << endl;
cout << typeid(class_traits<foo>::member<0>::type).name() << endl;
cout << typeid(class_traits<foo>::member<1>::type).name() << endl;
cout << typeid(class_traits<foo>::member<2>::type).name() << endl;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
可以那样做吗?如果是这样,怎么办?
我仅限于c++17
。
我完全可以使用宏和其他“ hacky”解决方案(如果可能的话,我希望将其保留在编译时而不是运行时)。