小编met*_*ter的帖子

在同一个容器中移动元素

如果下面的代码是未定义的行为,我正在尝试获取信息,我确实在这里阅读

特别是我想确保迭代器变量iter在移动元素与目标范围重叠的情况下有效。

我认为这不好但无法确认,有什么更好的方法可以做到这一点?

#include <vector>
#include <iostream>

int main()
{
    // move 3, 4 closer to beginning
    std::vector<int> vec { 1, 2, 3, 4, 5, 6, 7 };
    auto iter = std::move(vec.begin() + 2, vec.end() - 3, vec.begin() + 1);
    std::cout << *iter << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

也没有提到 thisiter应该指向什么?

c++ stl

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

[[deprecated]] 在 Visual Studio 中导致错误而不是警告

根据cppreference [[deprecated("message string")]]我们应该能够使用该符号,但在 VS 中会导致错误。

例如,我不想在 UNICODE 构建中为 ANSI 方法发出警告,反之亦然:

#ifdef UNICODE
[[deprecated("This method does not work well in UNICODE builds")]]
#endif // UNICODE
    void f() {}
Run Code Online (Sandbox Code Playgroud)

编译器不允许我编译,但标准说该属性应该允许使用但会发出警告消息。

如何解决这个问题?,顺便说一句。我的项目设置为最大程度地符合标准。

VS违反标准的原因是什么,有没有更好的方法来对上述情况发出警告?

c++ attributes

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

布尔值和布尔值的区别?

我见过一个类似这样的函数:

function
{
    [CmdletBinding()]
    [OutputType([Boolean])]
    param (
    [bool] $param
    }

    # ...
}
Run Code Online (Sandbox Code Playgroud)

Boolean和之间有什么区别bool

powershell boolean

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

在powershell中键入完全限定的类型名称?

例如,我想减少打字System和其他根命名空间

[string] $ComputerName = [Environment]::MachineName
Run Code Online (Sandbox Code Playgroud)

对比

[System.String] $ComputerName = [System.Environment]::MachineName
Run Code Online (Sandbox Code Playgroud)

另一个例子:

[Net.Dns]::GetHostEntry("192.168.1.1")
Run Code Online (Sandbox Code Playgroud)

对比

[System.Net.Dns]::GetHostEntry("192.168.1.1")
Run Code Online (Sandbox Code Playgroud)

键入System和需要类似的父命名空间时是否有任何原因和特定情况?

我经常想知道为什么System毕竟有命名空间,因为一切都在该命名空间内,那么与该命名空间有什么关系呢?这是胡说八道;无论如何,该术语System应该是什么意思?这里与操作系统无关。但是对于 NET 框架中的所有内容。

我假设调用静态方法时可能会出现异常,但我不知道 C# 所以无法自己回答这个问题。

powershell namespaces

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

使用 PSScriptAnalyzer 的 PowerShell 中的 OutputType 属性警告

波纹管是一个示例函数,它声明OutputType.

我知道这仅用于文档目的,但这里的问题是当我调用 PSScriptAnalyzer 时:

invoke-scriptanalyzer . -IncludeRule PSUseOutputTypeCorrectly
Run Code Online (Sandbox Code Playgroud)

它会告诉我:

cmdlet“Test-Function”返回“System.Object[]”类型的对象,但该类型未在 OutputType 属性中声明。

function Test-Function
{
    [CmdletBinding()]
    [OutputType([System.Management.Automation.PSCustomObject[]])]
    param ()

    [PSCustomObject[]] $TestObject = @()

    for ($i = 0; $i -lt 5; $i++)
    {
        $TestObject += [PSCustomObject]@{
            Key1 = "Value1"
            Key2 = "Value2"
        }
    }

    return $TestObject
}
Run Code Online (Sandbox Code Playgroud)

问题是我怀疑此信息是误报,但无法确认。

我想我声明这个OutputType属性很好,或者也许不是?

为什么我需要指定[OutputType([System.Object[]])]为输出类型?如果我回来的话PSCustomObject[]

powershell attributes analyzer

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

如何在不导致段错误的情况下测试“dynamic_cast”的结果

我正在使用多态和模板编写一个类,就像:


class base {
    virtual ~base() = default;
};

template <typename T>
class derived : public base {
T a;
    void save(T a_) { a = a_; }
};
Run Code Online (Sandbox Code Playgroud)

所以当我想使用 function 时derived::save(),基本上,我需要dynamic_cast,但它无法检查它是好演员还是坏演员:

void test() {
    base *p = new derived<float>();
    // good case
    dynamic_cast<derived<float>*>(p)->save(1);
    // bad case
    dynamic_cast<derived<int>*>(p)->save(1);
}

Run Code Online (Sandbox Code Playgroud)

如您所见,好的情况下工作正常,但坏的情况会导致段错误,这在大型项目中很难定位。

那么,有什么方法可以检查cast, 并警告用户:

template <typename T>
class derived : public base {
T a;
using type = T;
/// of course this would not work, …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism templates

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

为什么按“Enter”等于数字 0?

我不明白为什么按回车键和按键盘上的 0 是一样的。

[int] $Choice = -1
$Count = 2

while ($Choice -lt 0 -or $Choice -gt $Count)
{
    Write-Host "Input number"
    $Choice = Read-Host

    Write-Host "choice:"
    Write-Host $Choice

}
Run Code Online (Sandbox Code Playgroud)

即使按回车,输出也会是 0。我希望用户明确输入 0。

powershell

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

lambda“调用运算符”和“带括号的 lambda”

我读过一个答案并偶然发现了下面的示例代码,这是 Elliott 从其他 SO 问题中得到的答案

我在尝试理解两件事(并了解如何调用此语法)时遇到问题:

#include <iostream>

template <typename ... T>
void Foo (T && ... multi_inputs)
{
    int i = 0;
    
    ([&] (auto & input)
    {
        // Do things in your "loop" lambda
    
        ++i;
        std::cout << "input " << i << " = " << input << std::endl;

    } (multi_inputs), ...);
}


int main()
{
    Foo(2, 3, 4u, (int64_t) 9, 'a', 2.3);
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

两个问题,每个问题都有子问题:

  1. lambda 的末尾是表达式(multi_inputs), ...

这相当于以下简化语法:

auto y = [&]() { }(); …
Run Code Online (Sandbox Code Playgroud)

c++ syntax lambda

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

dllexport 函数未导出

我已经按照 MSDN 文档完成了所有操作,但我的函数仍然没有导出。 链接1 链接2 链接3

这是我所拥有的(2 个项目,DLL 和从 dll 导入的应用程序),如下所示(简短版本):

DLL函数.h

#prgma once
#ifdef COMPILE_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif // COMPILE_DLL

namespace wsl
{
        EXPORT bool PointInTriangle(int x1, int y1, int x2, int y2, int x3, int y3, int x, int y);
}
Run Code Online (Sandbox Code Playgroud)

DLL函数.cpp

#include "functions.h"

namespace wsl
{
    bool PointInTriangle(int x1, int y1, int x2, int y2, int x3, int y3, int x, int y)
    {
         // implementation...
         return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

DLL dllmain.cpp …

c++ dllimport dllexport

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

在模板参数包上使用类型特征?

在下面的示例代码中,我试图检查函数参数是否是指针 std::is_pointer

如果只有一个参数它工作得很好,但是如何使它与更多参数一起工作,例如在参数包中?

#include <type_traits>
#include <iostream>

class Test
{
public:
    template<typename... Params>
    void f(Params... params);

    template<typename T, typename... Params>
    auto sum(T arg, Params... params)
    {
        return arg + sum(params...);
    }

    template<typename T>
    auto sum(T arg)
    {
        return arg;
    }

    int member = 1;
};

template<typename... Params>
void Test::f(Params... params)
{
    // ERROR: too many template arguments for std::is_pointer
    if constexpr (std::is_pointer_v<Params...>)
        member += sum(*params...);
    else
        member += sum(params...);

    std::cout << member;
}

int main()
{
    Test ts;

    // both …
Run Code Online (Sandbox Code Playgroud)

c++ templates type-traits c++17 parameter-pack

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