我注意到以下代码在Python中是合法的.我的问题是为什么?有具体原因吗?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
Run Code Online (Sandbox Code Playgroud) 是否有Java的c ++等价物
try {
...
}
catch (Throwable t) {
...
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试调试调用本机Windows函数的Java/jni代码,并且虚拟机不断崩溃.本机代码在单元测试中看起来很好,并且在通过jni调用时似乎只会崩溃.一般的异常捕获机制将证明是非常有用的.
这个问题在那里向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++程序的主程序应该返回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,编译器无论如何都能够将它改为不同的值.
今天我的问题很简单:为什么编译器不能从类构造函数中推断模板参数,就像它可以从函数参数那样做?例如,为什么以下代码无效:
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代码库中,我看到每个宏都按以下方式定义:
#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)
我无法在网络上的任何地方找到这种做法.
当我减少数组时,我试图将数字设为零,但我不清楚这个函数的行为
[].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)
如果数组中唯一的元素是空字符串,则检索空字符串
该声明
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) 我一直试图弄清楚如何在新的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"命令,但是我没有看到如何将参数转发到终端,或者即使我使用了什么参数.
#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++ ×5
c ×4
arrays ×1
auto ×1
bash ×1
c++11 ×1
ecmascript-5 ×1
exception ×1
function ×1
if-statement ×1
ifndef ×1
inference ×1
javascript ×1
lambda ×1
macos ×1
macros ×1
parameters ×1
pointers ×1
printf ×1
python ×1
return-value ×1
size ×1
syntax ×1
templates ×1
terminal ×1
while-loop ×1