小编Jer*_*der的帖子

Windows Clang Hello World LNK4217

我已经安装了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问题此处的建议)减轻这些警告,但是,我不想在没有完全理解其含义的情况下这样做。

所以这是我的实际问题:

  1. 这些警告是什么意思或导致它们的原因?
  2. 使用clang-cl更改有什么意义,使用更改时我必须牢记什么?(我认为有理由不一直使用它)
  3. 还有其他方法可以不接收这些警告(关闭警告除外)?

c++ clang

6
推荐指数
1
解决办法
740
查看次数

HttpClient 中有多少个连接

背景

我必须从互联网上下载大约 16k 个文档和相同数量的 html 页面。这个数字在未来还会增加。目前我只是Parallel.ForEach用来并行下载和处理数据。然而,这似乎并没有充分利用我的资源,所以我计划async/await发挥作用,尽可能多地异步运行下载,但我可能不得不限制它。

实际问题

单个可以有多少个打开的连接HttpClient?在创建如此大量的连接时,我还必须记住哪些其他因素?我知道我应该重用它HttpClient,我也阅读了这个答案,但我怀疑我是否真的可以同时打开数十亿个连接。

c# dotnet-httpclient

6
推荐指数
1
解决办法
5965
查看次数

HttpClient.BaseAddress 的目的是什么,为什么我不能在第一次请求后更改它

所以我们大多数人可能已经读过我们应该重用 的实例,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)

c# dotnet-httpclient

5
推荐指数
2
解决办法
8668
查看次数

使用Visual Studio编译器在编译时获取矢量元素的大小(即使它为空)

给定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无法对其进行优化。是否可以通过更改此代码来实现?

c++ visual-c++

5
推荐指数
2
解决办法
157
查看次数

Three.js 与打字稿自动完成

我有一个使用 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)

node.js three.js typescript

2
推荐指数
1
解决办法
1619
查看次数

std :: make_unique和std :: unique_ptr之间的区别与内部新

这个问题是一个跟进这个问题

接受的答案指出:

make_unique创建临时文件是安全的,而明确使用临时文件,则new必须记住有关不使用未命名临时文件的规则

我大致理解了这是什么意思,并且我理解了给出的示例,但是这在内部究竟是如何工作的?这些功能究竟有什么作用,区别在哪里?

c++ unique-ptr

1
推荐指数
1
解决办法
133
查看次数