小编ein*_*ica的帖子

std :: numeric_limits :: quiet_NaN()与std :: nan()vs. NAN

我很惊讶表示安静的NaN值的C++工具的数量.我发现了三种标准方式:

  1. std::numeric_limits<T>::quiet_NaN() - 通用,我认为这是被选中的
  2. std::nan,std::nanf,std::nanl-家庭的接收功能const char*参数
  3. NAN - 一个宏,"评估为一个安静的非数字"

其中每一个都是在C++ 11中引入的.我有几个问题:

  1. const char*争论代表什么std::nan和合作?如何使用?
  2. 为什么我们需要在C++ 11中添加,而我们已经为此目的添加了一个通用特征类?(是否与C兼容?)
  3. 我应该默认使用的是什么?(我想这是第一次)

floating-point nan cmath c++11

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

在const上的结构化绑定

以下代码应该编译吗?

#include <type_traits>

void foo() {
  const std::pair<int, int> x = {1, 2};

  auto [a, b] = x;

  static_assert(std::is_const_v<decltype(a)>);
  static_assert(std::is_const_v<decltype(b)>);
}
Run Code Online (Sandbox Code Playgroud)

那么,这是MSVC错误吗?

该标准是不是直接在这里(我有一个快速浏览一下),但考虑规则auto,我想,a并且b应该被复制丢弃CV-预选赛

c++ c++17 structured-bindings

11
推荐指数
2
解决办法
370
查看次数

我们能用 C++20 构造带有视图的容器吗?

范围将随着 C++20 标准版本进入 C++。

我的问题:我们是否能够构建(现有)任何范围的标准库容器?更重要的是,具有范围视图?

例如,这会不会:

#include <vector>
#include <iostream>
#include <ranges>

int main() {
    auto sq = [](int x) { return x * x; };
    std::vector<int> vec { 3, 4, 5 };
    std::vector<int> squares { std::ranges::views::transform(vec, sq) };
    for(auto i : squares) { std::cout << i << ' '; }
    std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

是一个打印的有效程序9 16 25

与 range-v3 库一起编译,这是值得的。

c++ range-v3 c++20

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

cudaMemcpyToSymbol与cudaMemcpy为何仍然存在(cudaMemcpyToSymbol)

如其他问题所述并根据链接,您不能再使用此功能的符号名称.现在该功能已经消失,什么时候才能使用它cudaMemCpy?你什么时候想要使用它?什么是权衡或利益?

http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/group_ CUDART _MEMORY_gf268fa2004636b6926fdcd3189152a14.html

cuda

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

在CUDA内核中使用char变量是否会受到惩罚?

我似乎记得得到提示,我应该尽量避免在CUDA内核中使用char,因为SM喜欢32位整数.使用它们会有一些速度惩罚吗?例如,它做得慢

int a[4];
int b = a[0] + a[1] + a[2] + a[3];
a[1] = a[3];
a2[0] = a[0]
Run Code Online (Sandbox Code Playgroud)

char a[4];
char b = a[0] + a[1] + a[2] + a[3];
a[1] = a[3];
a2[0] = a[0]
Run Code Online (Sandbox Code Playgroud)

在内核代码?

笔记:

  • 我对使用char值进行算术,执行比较以及读取和写入内存的惩罚感兴趣.

c c++ performance types cuda

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

如何判断CMakeLists.txt中要求的最小CMake版本?

CMakeLists.txt脚本中,习惯上有一个:

cmake_minimum_required(VERSION x.y)
Run Code Online (Sandbox Code Playgroud)

为适当的xy版本号.但是 - 你怎么知道最低版本是什么?我不使用旧版本; 随着我的发行版更新,CMake也是如此,所以我甚至可能已经引入了需要更新版本的命令,而我只是不知道它.

理论上我可以要求我测试过这个版本CMakeLists.txt- 但它们很新(3.5.1,3.5.2),而且我不想限制我的代码用户.

cmake minimum-requirements

10
推荐指数
2
解决办法
1480
查看次数

如何处理size_t与std :: size_t?

刚读过:

"std :: size_t"在C++中有意义吗?

我发现::size_t当你使用时,使用不符合标准(虽然我的编译器支持)#include <cstddef>.我想遵守标准,但我不想在std::size_t的所有标准之前.那么,处理这个问题的习惯/流行方式是什么:

  • using std::size_t;
  • 包括<stddef.h>
  • 只是依靠编译支持?
  • 别的什么?

c++ size-t

10
推荐指数
2
解决办法
1800
查看次数

我应该如何检查基础类型值是否为枚举值?

让我们I成为一个整体类型.现在假设我有一个enum class my_enum_class : I,可能不连续的值.现在我得到了一些I价值.如何检查它是否是枚举的值my_enum_class

类似问题的答案(对于C语言)假设值是连续的,并且可以添加"虚拟"上限值,并检查0和该值之间的范围; 这与我的情况无关.还有另一种方法吗?

c++ enums

10
推荐指数
2
解决办法
623
查看次数

在 CLion 中,如何设置 CMakeLists.txt 选项值?

我正在尝试使用 CLion(最新版本 - 2019.3)来处理我的源存储库,该存储库已经使用了 CMake(即有一个CMakeLists.txt)。现在,该软件包有一些关于构建哪些目标的选项;默认情况下,它只构建一些测试,但如果您将选项设置为ON,则会编译并构建一堆测试。

不幸的是,我不太明白 CLion 在哪里可以让您为其生成的构建子目录设置 CMake 选项值。它真的强迫你使用默认值吗?还是我在主用户​​界面或首选项中遗漏了某些内容?

cmake buildconfiguration clion cmakelists-options

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

nullptr 可以转换为 uintptr_t 吗?不同的编译器不同意

考虑这个程序:

#include <cstdint>
using my_time_t = uintptr_t;

int main() {
    const my_time_t t = my_time_t(nullptr);
}
Run Code Online (Sandbox Code Playgroud)

使用 msvc v19.24 编译失败:

<source>(5): error C2440: '<function-style-cast>': cannot convert from 'nullptr' to 'my_time_t'
<source>(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type
<source>(5): error C2789: 't': an object of const-qualified type must be initialized
<source>(5): note: see declaration of 't'

Compiler returned: 2
Run Code Online (Sandbox Code Playgroud)

但是 clang (9.0.1) 和 gcc (9.2.1) “吃”了这段代码,没有任何错误。

我喜欢 MSVC 的行为,但是否符合标准?换句话说,它是 clang/gcc …

c++ gcc clang visual-c++ c++11

10
推荐指数
2
解决办法
845
查看次数