我已经安装了clang 6.0版以及Visual Studio2017。我正在编译一个简单的“ hello world”应用程序:
#include <iostream>
int main()
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用
clang hello.cpp
Run Code Online (Sandbox Code Playgroud)
这给了我警告:
hello-d1b2c6.o : warning LNK4217: locally defined symbol __std_terminate
imported in function "int `public: static unsigned __int64 __cdecl
std::char_traits<char>::length(char const * const)'::`1'::dtor$2"
(?dtor$2@?0??length@?$char_traits@D@std@@SA_KQEBD@Z@4HA)
hello-d1b2c6.o : warning LNK4217: locally defined symbol _CxxThrowException
imported in function "public: void __cdecl std::ios_base::clear(int,bool)"
(?clear@ios_base@std@@QEAAXH_N@Z)
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过使用clang-cl(如本SO问题和此处的建议)减轻这些警告,但是,我不想在没有完全理解其含义的情况下这样做。
所以这是我的实际问题:
clang-cl更改有什么意义,使用更改时我必须牢记什么?(我认为有理由不一直使用它)我必须从互联网上下载大约 16k 个文档和相同数量的 html 页面。这个数字在未来还会增加。目前我只是Parallel.ForEach用来并行下载和处理数据。然而,这似乎并没有充分利用我的资源,所以我计划async/await发挥作用,尽可能多地异步运行下载,但我可能不得不限制它。
单个可以有多少个打开的连接HttpClient?在创建如此大量的连接时,我还必须记住哪些其他因素?我知道我应该重用它HttpClient,我也阅读了这个答案,但我怀疑我是否真的可以同时打开数十亿个连接。
所以我们大多数人可能已经读过我们应该重用 的实例,HttpClient而不是使用using和创建新的实例。这意味着我可以只HttpClient在我的程序中创建一个实例,并GetAsync使用每个请求的完整 uri 字符串进行调用。这使我的BaseAddress财产HttpClient。考虑以下代码:
HttpClient microsoftClient = new HttpClient() { BaseAddress = new Uri("https://www.microsoft.com/") };
HttpClient stackoverflowClient = new HttpClient() { BaseAddress = new Uri("https://stackoverflow.com/") };
var response = microsoftClient.GetAsync("about").Result;
Console.WriteLine($"I {((response.IsSuccessStatusCode) ? "can" : "cannot")} access microsoft.com/about from the microsoft client");
response = microsoftClient.GetAsync("trademarks").Result;
Console.WriteLine($"I {((response.IsSuccessStatusCode) ? "can" : "cannot")} access microsoft.com/trademarks from the microsoft client");
response = stackoverflowClient.GetAsync("company/about").Result;
Console.WriteLine($"I {((response.IsSuccessStatusCode) ? "can" : "cannot")} access stackoverflow.com/company/about …Run Code Online (Sandbox Code Playgroud) 给定std::vector某种类型的元素,如何在使用Visual Studio编译器的编译时确定这些元素的类型大小。sizeof不能在第一个元素上使用,因为向量可能为空。
对于clang和gcc,我可以执行以下操作:
#include <vector>
template<typename T>
size_t size_of_vector_elements(std::vector<T> vector)
{
return sizeof(T);
}
int square(int num)
{
std::vector<unsigned> vector;
return size_of_vector_elements(vector);
}
Run Code Online (Sandbox Code Playgroud)
使用O2,将在编译时对其进行优化以使其仅返回4。但是MSVC无法对其进行优化。是否可以通过更改此代码来实现?
我有一个使用 Typescript 和 Three.js 的 Node.js 项目。为了导入模块,我使用 commonjs 语法,我通过以下方式配置了该语法
{
"compilerOptions": {
"module": "commonjs"
}
}
Run Code Online (Sandbox Code Playgroud)
在我的tsconfig.json。我通过 NPM 下载了 Three.js,有一个如下所示的打字稿文件:
const THREE = require('three');
const scene = new THREE.Scene();
Run Code Online (Sandbox Code Playgroud)
编译得很好,但我没有得到任何自动完成。我不认为这特定于所使用的编辑器,因为 Visual Studio Code 以及带有 YouCompleteMe 的 Neovim 都不起作用。如果我使用 ES6 模块语法,两者都可以工作:
import * as THREE from 'node_modules/three/src/Three';
const scene = new THREE.Scene();
Run Code Online (Sandbox Code Playgroud)
然而,在这里,如果不给出库的实际路径,我就无法让它工作(这是稍后使用 webpack 时的问题)。我忘记配置什么来获得自动完成(或者没有显式定义路径的 ES6 语法,目前我对这两种解决方案都很好)?
正如对已接受答案的评论中提到的,我无法找到我的错误,但在尝试创建一个最小的工作项目时找到了一个可行的解决方案。所以我会将其发布在这里,以防对其他人有所帮助。如果您遇到同样的问题,请仍然阅读答案,因为它是正确的。
我的源文件(在src/main.ts):
import * as THREE from 'three';
const scene = new THREE.Scene();
Run Code Online (Sandbox Code Playgroud)
package.json(使用 webpack 来测试库是否可以在那里解析):
{
"devDependencies": …Run Code Online (Sandbox Code Playgroud)