如果是这样,为什么下面的代码会给我警告
注意:即使在定义类时声明析构函数也不会调用析构函数或特定于类的运算符delete
?
struct C;
int main()
{
C *c = nullptr;
delete c;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我明白为什么它会在一般情况下是不确定的行为,如果C有非平凡/虚析构函数,但不标准的保证/定义delete上nullptr始终是一个noop不管情况如何?
重申:我具体询问指向不完整类型的指针的情况nullptr!
我有一堆简单的.ts文件。不是项目(即独立的 .ts 脚本)。他们使用一些 Node.js 功能。TypeScript 和节点类型定义通过安装
npm install -g typescript
npm install -g @types/node
Run Code Online (Sandbox Code Playgroud)
问题:在 Windows 上我可以tsc foo.ts毫无问题地运行。它可以很好地将 .ts 转换为 .js。但在 Ubuntu 16.04 上,它给了我error TS2304: Cannot find name 'require',error TS2304: Cannot find name 'process'等等。即使添加/// <reference types="node" />到顶部foo.ts或添加--types node开关到 tsc 我也得到error TS2688: Cannot find type definition file for 'node'。
看起来全局安装某些类型在 Windows 中运行良好,但在 Ubuntu 上则不然,所以我假设这不是设计使然。那么有没有办法在全球范围内安装它们呢?或者更准确地说:引用 Ubuntu 上全局安装的类型定义?
基本上我有一些 C/C++ 代码需要在 Linux 机器上构建和调试。不幸的是,我的 Windows 笔记本电脑没有足够的可用硬盘空间来安装一些 Linux dist,也没有足够的可用 RAM 来舒适地运行 VM。
到目前为止,我使用 WSL 处理它相当轻松,但规模相当小。通过 CLI 和 gdb 编辑和调试 2-3 个 .c 文件很容易,但是在大型项目中变得非常烦人。
我想要一些简单的东西,比如“在 Windows IDE [X] 中编辑代码,在远程 Linux/WSL 上编译它(项目使用 Makefiles),最好通过 gdb 调试它”。
VS 有一些接近我想要的东西,但它无法处理现有的 Linux 项目。它需要创建一个与项目的 Makefile 不同的新配置。
为什么编译失败:
template<typename T, int N>
using vec = vector<vec<T, N - 1>>;
template<typename T>
using vec<0> = T;
Run Code Online (Sandbox Code Playgroud)
而将它嵌套到结构中就可以了:
template<typename T, int N>
struct foo {
using vec = vector<typename foo<T, N - 1>::vec>;
};
template<typename T>
struct foo<T, 0> {
using vec = T;
};
Run Code Online (Sandbox Code Playgroud)
如果您可以用更详细的构造替换它,那么禁止别名中的递归的理由是什么?
参见: https: //godbolt.org/g/YtyhvL
这变得非常烦人,所以我认为我只是做错了什么。
问题:我花了一些时间仔细选择要提交的内容 (git)、编写提交消息、选择作者。当我按下 commit 时,我收到 Before Commit hook/inspection 通知我我有一些 TODO 文件要提交。好吧,我解决了这个问题,然后呢?我再次打开提交菜单 (Ctrl+K),除了消息之外什么都没有保存!如果我决定跳转到某个文件的源以应用一些修复或只是更仔细地检查它,也是如此。
这里肯定有问题,因为我不明白这是如何产生生产力的,而且没有其他 git 工具/git cli 表现得像这样。
请注意,我不反对提交前检查(我知道如何禁用它)。我要它。我只想从我离开的那里恢复提交。
编辑:另一种类似的情况 - 无论出于何种原因,提交都失败了。我想重复一遍,改变一些小事情。但是Idea忘记了。我需要再次经历整个过程。
问题是在一个平台上(windows,mvsc2015)uint64_t被定义为unsigned long long另一个平台(ubuntu,clang),unsigned long并且有代码看起来像
sprintf(buffer, "%#llx", u64key);
问题:我写了这样的东西(内部proc):
.CODE
myProc PROC
vpmovsxbd ymm0, qword ptr [rdx] ; rdx is ptr to array of 8 bytes
vcvtdqps ymm0, ymm0
ret
myProc ENDP
Run Code Online (Sandbox Code Playgroud)
和masm一起抱怨invalid instruction operands第一次和syntax error : ymm0第二次.我正在使用VS15社区版编译x64.