以下代码编译没有问题:
int main() {
printf("Hi" "Bye");
}
Run Code Online (Sandbox Code Playgroud)
但是,这不编译:
int main() {
int test = 0;
printf("Hi" (test ? "Bye" : "Goodbye"));
}
Run Code Online (Sandbox Code Playgroud)
这是什么原因?
Eclipse在以下代码中给出了警告:
public int getTicket(int lotteryId, String player) {
try {
c = DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, this.password);
int ticketNumber;
PreparedStatement p = c.prepareStatement(
"SELECT max(num_ticket) " +
"FROM loteria_tickets " +
"WHERE id_loteria = ?"
);
p.setInt(1, lotteryId);
ResultSet rs = p.executeQuery();
if (rs.next()) {
ticketNumber = rs.getInt(1);
} else {
ticketNumber = -1;
}
ticketNumber++;
p = c.prepareStatement(
"INSERT INTO loteria_tickets " +
"VALUES (?,?,?,?)");
p.setInt(1, lotteryId);
p.setInt(2, ticketNumber);
p.setString(3, player); …Run Code Online (Sandbox Code Playgroud) 在一个例子中,我的教授已经实现了Equals如下:
public class Person {
private string dni;
// ...
public override bool Equals(object o) {
if (o == null)
return (this == null);
else {
return ((o is Person) && (this.dni == (o as Person).dni));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我没有使用C#的经验,但据我所知,this在成员函数中不能为null(至少在C++和Java中,我知道的语言是这样)所以if看起来很奇怪.
我是对的还是c#中有任何组件我不知道哪个使测试成为this == null必要的?
我是python的新手,我正在尝试使用库.它提出了一个例外,我试图找出哪一个.这就是我想要的:
except tweepy.TweepError as e:
print e
print type(e)
print e.__dict__
print e.reason
print type(e.reason)
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
[{u'message': u'Sorry, that page does not exist', u'code': 34}]
<class 'tweepy.error.TweepError'>
{'reason': u"[{u'message': u'Sorry, that page does not exist', u'code': 34}]", 'response': <httplib.HTTPResponse instance at 0x00000000029CEAC8>}
[{u'message': u'Sorry, that page does not exist', u'code': 34}]
<type 'unicode'>
Run Code Online (Sandbox Code Playgroud)
我试图达到那个代码.我试过e.reason.code没有成功,我不知道该尝试什么.
我写的是这样的代码:
do {
int i = 0;
int j = i * 2;
cout<<j;
i++;
} while (j < 100);
Run Code Online (Sandbox Code Playgroud)
当我的编译器告诉我我不能使用变量'j'时,我感到很惊讶,因为它没有在do-while循环之外声明.
我很好奇是否有任何技术原因导致这种情况无法实现.
我最近和我的教授讨论了如何处理基本的jdbc连接方案.假设我们想要执行两个查询,这就是他的建议
public void doQueries() throws MyException{
Connection con = null;
try {
con = DriverManager.getConnection(dataSource);
PreparedStatement s1 = con.prepareStatement(updateSqlQuery);
PreparedStatement s2 = con.prepareStatement(selectSqlQuery);
// Set the parameters of the PreparedStatements and maybe do other things
s1.executeUpdate();
ResultSet rs = s2.executeQuery();
rs.close();
s2.close();
s1.close();
} catch (SQLException e) {
throw new MyException(e);
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException e2) {
// Can't really do anything
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这种方法,我有两个问题:
1.A),我认为,如果有异常,我们做"其他的事情",或者在该行抛出rs.close()还是 …
所以,我知道char const*,char*const和char const*const之间的区别.那些是:
char*the_string:我可以更改the_string指向的char,我可以修改它指向的char.
const char*the_string:我可以更改the_string指向的char,但是我无法修改它指向的char.
char*const the_string:我无法更改the_string指向的char,但我可以修改它指向的char.
const char*const the_string:我不能更改the_string指向的char,也不能修改它指向的char.
(来自const char*const与const char*?)
现在,我的问题是:假设我正在编写一个不会修改传递给它的C字符串的函数,例如:
int countA(??? string) {
int count = 0;
int i;
for (i=0; i<strlen(string); i++) {
if (string[i] == 'A') count++;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
现在,标题应该是什么?
int countA(char const * string);
int countA(char const * const string);
Run Code Online (Sandbox Code Playgroud)
我的感觉是我应该使用第二个,因为我不会修改指针本身,也不会修改数组的内容.但是,当我查看标准函数的标题时,他们使用第一个.例
char * strcpy ( char * destination, const char * source );
Run Code Online (Sandbox Code Playgroud)
为什么?
(事实上char const *对我来说没有意义,因为如果你正在考虑抽象字符串,要么你没有修改字符串(所以,char const * const因为你没有修改指针,也没有修改内容)或者你将修改string(所以只是char *因为你可以修改内容,你可能需要分配更多的内存,所以你可能需要修改指针) …
我正在将一些程序从Matlab移植到C++以提高效率.重要的是两个程序的输出完全相同(**).
我对此操作面临不同的结果:
std::sin(0.497418836818383950) = 0.477158760259608410 (C++)
sin(0.497418836818383950) = 0.47715876025960846000 (Matlab)
N[Sin[0.497418836818383950], 20] = 0.477158760259608433 (Mathematica)
Run Code Online (Sandbox Code Playgroud)
所以,据我所知,C++和Matlab都使用IEEE754定义的双算术.我想我已经阅读过IEEE754在最后一位允许不同结果的地方.使用mathematica来决定,似乎C++更接近于结果.如何强制Matlab精确计算包含最后一位的sin,以便结果相同?
在我的程序中,这种行为会导致很大的错误,因为数值微分方程求解器在最后一位不断增加这个错误.但是我不确定C++移植版本是否正确.我猜测即使IEEE754允许最后一位不同,在某种程度上保证在更多IEEE754定义的双重操作中使用结果时这个错误不会变得更大(因为否则,根据IEEE754标准,两个不同的程序可以产生完全不同的输出).所以另一个问题是我是对的吗?
我想得到两个粗体问题的答案.编辑:第一个问题是相当有争议的,但不太重要,有人可以评论第二个问题吗?
注意:这不是打印中的错误,以防您想要检查,这是我获得这些结果的方式:
http://i.imgur.com/cy5ToYy.png
注意(**):我的意思是最终输出,它是一些计算的结果,显示一些带有4位小数的实数,需要完全相同.我在问题中谈到的错误变得更大(因为更多的操作,每一个在Matlab和C++中都是不同的)所以最终的差异是巨大的)(如果你很好奇,看看差异如何开始变大,这里是完整输出[很快链接],但这与问题无关)
请考虑以下代码
class MyClass {
public MyClass(Map<String, String> m) {
System.out.println("map");
}
public MyClass(SortedMap<String, String> m) {
System.out.println("sortedmap");
}
}
public class Test {
public <T extends Map<String,String>> Test(T t) {
new MyClass(t);
}
public static void main(String[] args) {
new Test(new TreeMap<String,String>());
}
}
Run Code Online (Sandbox Code Playgroud)
它打印map.为什么T推断为Map,而不是SortedMap在public <T extends Map<String, String>> Test(T t)?有没有办法改变这种行为,以便使用最具体的构造函数MyClass?
我在高斯模糊中看到了 sigma 和半径之间的以下关系(来自http://en.wikipedia.org/wiki/Talk%3AGaussian_blur#Radius_again以及一些程序的实现,例如http://imagej .nih.gov/ij/source/ij/plugin/filter/GaussianBlur.java第 526 行)

这种关系从何而来?(我认为 255 与精度有关(255 = 2^8-1 => 8 位图像)