小编SWd*_*WdV的帖子

std::ranges::begin 和 std::begin 有什么区别?

std::begin和 new 和有什么不一样std::ranges::begin?(同样为endsize等等)

两者似乎工作相同:

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

template<std::ranges::range R>
void printInfo(const R &range)
{
    std::cout << (std::ranges::begin(range) == std::begin(range));
}

template<class T>
struct X
{
    std::vector<T> v;

    auto begin() const { return v.begin(); }
    auto end() const { return v.end(); }
};

int main()
{
    printInfo(std::vector{1, 2, 3, 4});
    printInfo(std::array{1, 2, 3, 4});
    printInfo(X<int>{{1, 2, 3, 4}});

    int oldSchool[]{1, 2, 3, 4};
    printInfo(oldSchool);
}
Run Code Online (Sandbox Code Playgroud)

1111按预期编译和打印。

难道ranges::begin …

c++ range c++20 std-ranges

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

为什么 std::ranges 算法缺少并行重载(采用执行策略参数)?

C++ 算法库中的许多函数都有重载,采用类型为 的参数ExecutionPolicy,例如std::copy. 但是,我注意到std::ranges命名空间中的相应函数没有这些并行重载。这很不幸,因为这意味着在许多情况下,非范围变体将更有用。

这是什么原因?是否有向std::ranges命名空间添加并行重载的建议?

c++ parallel-processing iterator c++20 std-ranges

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

使用SAL注释的Visual Studio社区代码分析的质量

我希望这个问题不超出SO的范围; 如果是(对不起那种情况),请告诉我它属于哪里,我会尝试将它移到那里.

用于C/C++中静态代码分析的SAL注释的概念对我来说似乎非常有用.以MSDNwmemcpy上错误实现的示例为例:了解SAL:

wchar_t * wmemcpy(
   _Out_writes_all_(count) wchar_t *dest,
   _In_reads_(count) const wchar_t *src,
   size_t count)
{
   size_t i;
   for (i = 0; i <= count; i++) { // BUG: off-by-one error
      dest[i] = src[i];
   }
   return dest;
}
Run Code Online (Sandbox Code Playgroud)

MSDN说"代码分析工具可以通过单独分析这个功能来捕获错误",这看起来很棒,但问题是,当我在VS 2017社区中粘贴此代码时,没有关于此代码分析的警告,甚至没有启用所有分析警告.(像其他警告C26481 Don't use pointer arithmetic. Use span instead (bounds.1)..)

这应该产生警告(至少根据另一个例子回答什么是SAL(来源标注语言)的目的是什么SAL 1和2之间的差异),但不会:

_Success_(return) bool GetASmallInt(_Out_range_(0, 10) int& an_int);

//main:
int result;
const auto ret = GetASmallInt(result);
std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ static-analysis sal visual-studio-2017

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

为什么 std::span 缺少 cbegin 和 cend 方法?

为什么std::span只有beginandend方法而不是它们的常量迭代器对应物cbeginand cend?(标准

我还注意到,我能找到的关于 span 的建议确实对cbeginand有定义cendP0122R7。为什么被删除了?

c++ iterator c++20 std-span

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

C# 8.0 泛型:可能错误返回空引用?

在我安装 VS 社区 16.5.0 预览版 2.0 之前,以下使用可为空引用的通用函数工作正常(在此之前我使用预览版 1.0,我使用的是 .NET Core 3.0/3.1):

static async Task<C> Test<C>(MyClass a, MyClass b, Func<MyClass, Task<C>> extract) where C : class? =>
    await extract(a) ?? (b is {} ? await extract(b) : null);

static T MinOrDefault<T>(this IEnumerable<T> enumerable) =>
    enumerable.Any() ? enumerable.Min() : default;
Run Code Online (Sandbox Code Playgroud)

但现在两者都给出错误CS8603 Possible null reference return. 有谁知道这种行为是否是故意的?有没有一个好的方法来解决这个问题?

这里提出了类似的问题,但并没有真正令人满意的答案;特别是因为它不能与评论Task中提到的 s很好地配合。

c# generics c#-8.0 nullable-reference-types

5
推荐指数
0
解决办法
424
查看次数

JS名称空间Netbeans变量未声明

当我在JavaScript中定义命名空间时,Netbeans给出了一个未声明错误的全局变量,而我认为它不应该.为什么是这样?
演示代码:

var MyNamespace = new function () {
    var MyClass = function () {};
    MyClass.SOME_CONSTANT = 9; // MyClass not defined
    this.MyClass = MyClass; // MyClass not defined
};
Run Code Online (Sandbox Code Playgroud)

我检查了这个代码在IE(文档模式IE 5)和Edge 13中工作.代码是一个模块模式,就像在这个答案中的语法.

编辑:首先声明一个变量可能没用,因为命名空间内的函数有时会改变局部变量而不是公共命名空间中的变量,对不对?不过,我想知道为什么Netbeans会给我一个错误.

javascript netbeans namespaces javascript-namespaces

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