我很惊讶表示安静的NaN值的C++工具的数量.我发现了三种标准方式:
std::numeric_limits<T>::quiet_NaN() - 通用,我认为这是被选中的std::nan,std::nanf,std::nanl-家庭的接收功能const char*参数NAN - 一个宏,"评估为一个安静的非数字"其中每一个都是在C++ 11中引入的.我有几个问题:
const char*争论代表什么std::nan和合作?如何使用?以下代码应该编译吗?
#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++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 库一起编译,这是值得的。
如其他问题所述并根据链接,您不能再使用此功能的符号名称.现在该功能已经消失,什么时候才能使用它cudaMemCpy?你什么时候想要使用它?什么是权衡或利益?
我似乎记得得到提示,我应该尽量避免在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)
在内核代码?
笔记:
在CMakeLists.txt脚本中,习惯上有一个:
cmake_minimum_required(VERSION x.y)
Run Code Online (Sandbox Code Playgroud)
为适当的xy版本号.但是 - 你怎么知道最低版本是什么?我不使用旧版本; 随着我的发行版更新,CMake也是如此,所以我甚至可能已经引入了需要更新版本的命令,而我只是不知道它.
理论上我可以要求我测试过这个版本CMakeLists.txt- 但它们很新(3.5.1,3.5.2),而且我不想限制我的代码用户.
刚读过:
我发现::size_t当你使用时,使用不符合标准(虽然我的编译器支持)#include <cstddef>.我想遵守标准,但我不想在std::我size_t的所有标准之前.那么,处理这个问题的习惯/流行方式是什么:
using std::size_t;?<stddef.h>?让我们I成为一个整体类型.现在假设我有一个enum class my_enum_class : I,可能不连续的值.现在我得到了一些I价值.如何检查它是否是枚举的值my_enum_class?
对类似问题的答案(对于C语言)假设值是连续的,并且可以添加"虚拟"上限值,并检查0和该值之间的范围; 这与我的情况无关.还有另一种方法吗?
我正在尝试使用 CLion(最新版本 - 2019.3)来处理我的源存储库,该存储库已经使用了 CMake(即有一个CMakeLists.txt)。现在,该软件包有一些关于构建哪些目标的选项;默认情况下,它只构建一些测试,但如果您将选项设置为ON,则会编译并构建一堆测试。
不幸的是,我不太明白 CLion 在哪里可以让您为其生成的构建子目录设置 CMake 选项值。它真的强迫你使用默认值吗?还是我在主用户界面或首选项中遗漏了某些内容?
考虑这个程序:
#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 …