小编Tre*_*key的帖子

关于Python while语句的Else子句

我注意到以下代码在Python中是合法的.我的问题是为什么?有具体原因吗?

n = 5
while n != 0:
    print n
    n -= 1
else:
    print "what the..."
Run Code Online (Sandbox Code Playgroud)

python syntax if-statement while-loop

293
推荐指数
7
解决办法
17万
查看次数

C++捕获所有异常

是否有Java的c ++等价物

try {
    ...
}
catch (Throwable t) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试调试调用本机Windows函数的Java/jni代码,并且虚拟机不断崩溃.本机代码在单元测试中看起来很好,并且在通过jni调用时似乎只会崩溃.一般的异常捕获机制将证明是非常有用的.

c++ exception

226
推荐指数
12
解决办法
33万
查看次数

C指针:指向固定大小的数组

这个问题在那里向C大师们提出:

在C中,可以如下声明指针:

char (* p)[10];
Run Code Online (Sandbox Code Playgroud)

..这基本上表明这个指针指向一个10个字符的数组.声明这样的指针的巧妙之处在于,如果尝试将不同大小的数组指针分配给p,则会出现编译时错误.如果您尝试将简单char指针的值赋给p,它也会给出编译时错误.我用gcc尝试了这个,它似乎适用于ANSI,C89和C99.

在我看来,声明像这样的指针非常有用 - 特别是在将指针传递给函数时.通常,人们会编写这样一个函数的原型:

void foo(char * p, int plen);
Run Code Online (Sandbox Code Playgroud)

如果您期望具有特定大小的缓冲区,则只需测试plen的值.但是,您无法保证将p传递给您的人真的会在该缓冲区中为您提供有效的内存位置.你必须相信调用这个函数的人正在做正确的事情.另一方面:

void foo(char (*p)[10]);
Run Code Online (Sandbox Code Playgroud)

..会强制调用者为您提供指定大小的缓冲区.

这似乎非常有用,但我从未见过在我遇到过的任何代码中都声明了这样的指针.

我的问题是:人们有没有理由不宣布像这样的指针?我没有看到一些明显的陷阱吗?

c size pointers

107
推荐指数
2
解决办法
6万
查看次数

我应该从main()返回EXIT_SUCCESS还是0?

这是一个简单的问题,但我一直看到相互矛盾的答案:C++程序的主程序应该返回0还是EXIT_SUCCESS

#include <cstdlib>
int main(){return EXIT_SUCCESS;}
Run Code Online (Sandbox Code Playgroud)

要么

int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)

它们是完全相同的吗?应该EXIT_SUCCESS只与exit()?一起使用?

我认为EXIT_SUCCESS这是一个更好的选择,因为其他软件可能想要将零视为失败,但我也听说如果你返回0,编译器无论如何都能够将它改为不同的值.

c c++ program-entry-point return-value

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

为什么不从构造函数推断模板参数?

今天我的问题很简单:为什么编译器不能从类构造函数中推断模板参数,就像它可以从函数参数那样做?例如,为什么以下代码无效:

template<typename obj>
class Variable {
      obj data;
      public: Variable(obj d)
              {
                   data = d;
              }
};

int main()
{
    int num = 2;
    Variable var(num); //would be equivalent to Variable<int> var(num),
    return 0;          //but actually a compile error
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,我明白这是无效的,所以我的问题是为什么不是呢?允许这会产生任何重大的句法漏洞吗?是否存在不希望使用此功能的实例(推断类型会导致问题)?我只是想了解允许函数的模板推理背后的逻辑,但不适用于适当构造的类.

c++ parameters templates inference

101
推荐指数
6
解决办法
2万
查看次数

为什么只定义一个宏,如果它还没有定义?

在我们的C代码库中,我看到每个宏都按以下方式定义:

#ifndef BEEPTRIM_PITCH_RATE_DEGPS
#define BEEPTRIM_PITCH_RATE_DEGPS                   0.2f
#endif

#ifndef BEEPTRIM_ROLL_RATE_DEGPS
#define BEEPTRIM_ROLL_RATE_DEGPS                    0.2f
#endif

#ifndef FORCETRIMRELEASE_HOLD_TIME_MS
#define FORCETRIMRELEASE_HOLD_TIME_MS               1000.0f
#endif

#ifndef TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS
#define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS       50.0f
#endif
Run Code Online (Sandbox Code Playgroud)

这些定义检查的理由是什么,而不仅仅是定义宏?

#define BEEPTRIM_PITCH_RATE_DEGPS                   0.2f
#define BEEPTRIM_ROLL_RATE_DEGPS                    0.2f
#define FORCETRIMRELEASE_HOLD_TIME_MS               1000.0f
#define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS       50.0f
Run Code Online (Sandbox Code Playgroud)

我无法在网络上的任何地方找到这种做法.

c macros c-preprocessor ifndef

92
推荐指数
5
解决办法
4721
查看次数

Javascript减少一个空数组

当我减少数组时,我试图将数字设为零,但我不清楚这个函数的行为

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});
Run Code Online (Sandbox Code Playgroud)

结果

TypeError: Reduce of empty array with no initial value
Run Code Online (Sandbox Code Playgroud)

似乎如果数组是空的我无法减少它

[""].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});
Run Code Online (Sandbox Code Playgroud)

结果

""
Run Code Online (Sandbox Code Playgroud)

如果数组中唯一的元素是空字符串,则检索空字符串

javascript arrays ecmascript-5

90
推荐指数
2
解决办法
4万
查看次数

为什么printf("%f",0); 给出未定义的行为?

该声明

printf("%f\n",0.0f);
Run Code Online (Sandbox Code Playgroud)

打印0.

但是,声明

printf("%f\n",0);
Run Code Online (Sandbox Code Playgroud)

打印随机值.

我意识到我表现出某种未定义的行为,但我无法弄明白为什么具体.

所有位都为0的浮点值仍然有效float,值为0.
float并且int在我的机器上具有相同的大小(如果它甚至相关).

为什么使用整数文字而不是浮点文字printf会导致此行为?

如果我使用PS,可以看到相同的行为

int i = 0;
printf("%f\n", i);
Run Code Online (Sandbox Code Playgroud)

c c++ printf undefined-behavior implicit-conversion

86
推荐指数
7
解决办法
6931
查看次数

在新的Mac OS X终端窗口中运行命令

我一直试图弄清楚如何在新的Max OS X Terminal.app窗口中运行bash命令.举个例子,这是我在新的bash过程中运行命令的方法:

bash -c "my command here"
Run Code Online (Sandbox Code Playgroud)

但是,这会重用现有的终端窗口而不是创建新的终端窗口.我想要的东西:

Terminal.app -c "my command here"
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用.我知道"open -a Terminal.app"命令,但是我没有看到如何将参数转发到终端,或者即使我使用了什么参数.

macos bash terminal

85
推荐指数
5
解决办法
12万
查看次数

lambda的返回类型可以通过返回值推导出来,那么为什么函数不能?

#include <iostream>

int main(){

    auto lambda = [] {
        return 7;
    };

    std::cout << lambda() << '\n';

}
Run Code Online (Sandbox Code Playgroud)

该程序编译并打印7.
lambda的返回类型基于返回值7推导为整数类型.


为什么普通功能不能实现这一点?

#include <iostream>

auto function(){
    return 42;
}

int main(){

    std::cout << function() << '\n';
}
Run Code Online (Sandbox Code Playgroud)

错误:'function'函数使用'auto'类型说明符而没有尾随返回类型

c++ lambda function auto c++11

75
推荐指数
5
解决办法
5138
查看次数