小编Joh*_*uld的帖子

如何从C#关闭计算机

从C#程序关闭计算机的最佳方法是什么?

我发现了一些有效的方法 - 我会在下面发布它们 - 但它们都不是很优雅.我正在寻找更简单和原生的东西.net.

.net c# windows shutdown

136
推荐指数
11
解决办法
21万
查看次数

为什么这个C++ 11 lambda不像我期望的那样?

我遇到了一个挑战我对C++ lambdas的新生理解的情况,我把它简化为以下内容:

#include <iostream>

void test()
{
    int (*func)();

    func =
        []()->int {
            std::cerr << "func()" << std::endl;
            return 0;
        };

    int i = 0;
    func =
        [i]()->int {
            std::cerr << "func(): i= " << i << std::endl;
            return 0;
        };
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,我将一个非常简单的lambda分配给一个函数指针,它看起来像我期望的那样工作.我在第二种情况下尝试做的是为lambda提供对值的访问i.我对[i]()->int {代码的理解}是它定义了一个没有参数的无名函数,返回一个int并且,通过C++ 11独角兽的魔力,知道它的当前值i.我希望这个lambda应该可以调用int(*)().

test.cpp: In function ‘void test()’:
test.cpp:14:7: error: cannot convert ‘test()::__lambda1’ to ‘int (*)()’ in assignment
  func =
       ^
Run Code Online (Sandbox Code Playgroud)

似乎gcc 4.8.1和4.8.2不同意我的评估(4.4.1甚至拒绝讨论此事).

这似乎表明第二个lambda的类型与函数指针不是赋值兼容的.我不明白为什么会出现这种情况,因为该表达式应该可以调用为" int(*)() …

c++ lambda closures c++11

8
推荐指数
2
解决办法
493
查看次数

编译错误?g ++允许可变大小的静态数组,除非函数是模板化的

下面的代码演示了我无法解释的gcc 4.6.2的行为.第一个函数声明一个类型为vec_t的静态数组,其中vec_t是unsigned char的typedef'd别名.除了vect_t的类型是模板参数之外,第二个函数是相同的.第二个函数无法使用诊断编译"错误:'bitVec'的存储大小不是常量".

#include <limits>

void bitvec_func()
{
    const std::size_t       nbits = 1e7;
    typedef unsigned char   vec_t;
    const std::size_t       WLEN  = std::numeric_limits<vec_t>::digits;
    const std::size_t       VSIZ  = nbits/WLEN+1;
    static vec_t            bitVec[nbits/VSIZ];    // Compiles fine
}

template <typename T>
void bitvec_func()
{
    const std::size_t       nbits = 1e7;
    typedef T               vec_t;
    const std::size_t       WLEN  = std::numeric_limits<vec_t>::digits;
    const std::size_t       VSIZ  = nbits/WLEN+1;
    static vec_t            bitVec[nbits/VSIZ];    // "error: storage size of ‘bitVec’ isn’t constant"
}

void flarf()
{
    bitvec_func();
    bitvec_func<unsigned char>();
}
Run Code Online (Sandbox Code Playgroud)

在我看来,使用参数<unsigned char>实例化模板应该使编译器生成与第一个函数相同的代码.任何人都可以提供任何洞察力,为什么这似乎不是这样的?

[附录:第二个函数 …

c++ gcc templates dynamic-arrays

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

`unique_ptr :: operator bool()`是为来自move()d的unique_ptr定义的吗?

我的理解是,在从标准库对象移动后,该对象处于有效但未定义的状态.但是在a的情况下,unique_ptr它是多么不确定?根据经验,下面的代码似乎有效,也就是说,在我离开后p1," if ( p1 )"评估为false.直觉上,这似乎是正确的行为.但我可以依靠这个吗?

#include <memory>
#include <iostream>

int main( int argc, char* argv[] )
{
    using namespace std;

    unique_ptr<int> p1 {make_unique<int>(1)};
    unique_ptr<int> p2;

    if ( p1 )
        cout << "p1 owns an object" << endl;
    if ( p2 )
        cout << "p2 owns an object" << endl;

    p2 = move(p1);

    // Is the following test valid, now that p1 has been moved from?
    if ( p1 )
        cout << "p1 owns an object" …
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr c++-standard-library move-semantics c++11

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