我遇到了一些类似于以下内容的C++代码:
class exception {};
int main()
{
try {
throw exception();
} catch (exception()) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
注意括号中的额外括号catch (exception()).根据Compiler Explorer,它被编译为与写入时相同的对象代码catch (exception &).
在什么基础上允许使用额外的括号,以及标准的哪一部分允许这样做?据我所知,一个catch子句需要一个类型说明符,但exception()似乎不是一个类型说明符.
有一个带有广泛对象图的应用程序.该图主要由一组子图组成,这些子图通过唯一的参考连接到图的其余部分.但在内部,每个这样的子图在对象之间都有一些交叉引用.偶尔这样的子图需要被抛弃.仅仅将指向该子图的唯一引用设置为null以使其符合垃圾收集的条件是否足够?
我担心的是内部交叉引用可能会"保护"整个子图从垃圾收集.换句话说,垃圾收集器是否足够明智,可以确定子图中的所有引用都不会离开子图的边界,因此可以清除整个子图.
让我们说我们有x和y,两者都是C中的有符号整数,我们如何找到两者之间最准确的平均值?
我更喜欢一种不利用任何机器/编译器/工具链特定工作的解决方案.
我提出的最好(a / 2) + (b / 2) + !!(a % 2) * !!(b %2)的解决方案是:有更准确的解决方案吗?快点?更简单?
如果我们知道一个是否比另一个先验大?
谢谢.
d
编者注:请注意,当输入值接近C int类型的最大绝对边界时,OP需要不受整数溢出影响的答案.这在原始问题中没有说明,但在给出答案时很重要.
我可以__repr__为类而不是实例定义一个吗?例如,我正在尝试这样做
class A(object):
@classmethod
def __repr__(cls):
return 'My class %s' % cls
Run Code Online (Sandbox Code Playgroud)
我得到的是
In [58]: a=A()
In [59]: a
Out[59]: My class <class '__main__.A'>
In [60]: A
Out[60]: __main__.A
Run Code Online (Sandbox Code Playgroud)
我试图让第60行的输出看起来像"我的A类",而不是实例a.我想这样做的原因是我使用Python的元类生成了很多类.而且我想要一种更易读的方法来识别类而不是股票代理.
我正在学习计算机组织和汇编语言课程.本周我们实验室的书面部分有一个问题让我难过.问题是......
减去以下无符号二进制数(显示借位和溢出位).不要转换成二进制补码.
0101 0111 1101
-1110 1011 0110
--------------
Run Code Online (Sandbox Code Playgroud)
我意识到答案是-1001 0011 1001但是我很难通过取较大的数字并从较小的数字中减去并显示我的工作来弄清楚如何借用来实际执行这个减法.我的整个生命从一个较小的数字中减去一个大数字我已经扭转了问题,而是从较大的数字中减去较小的数字,并在结果前面添加了一个负号.我问教授,他说他希望问题能够解决问题.我不允许通过从较大的数字中减去较小的数字来解决这个问题,并且像我通常那样否定.我无法在网上找到任何从较小的无符号二进制数减去较大的无符号二进制数的例子.
如果有人可以向我描述如何在这种情况下执行减法,我将非常感激.
更新:@Alex是正确的.教授正在寻找
0110 1100 0111 (1735)
Run Code Online (Sandbox Code Playgroud)
感谢大家.
我正在为学校实现一个算法,并且在理解编程中如何表示一个定积分时遇到了问题.例如,我知道Summation方程可以实现为以下示例:
假设y = f(x)
if(x==0){
y=x+1;
}else{
for(int i = 0; i < n; i++){
y = y + (x - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
那么我如何表示数值积分,例如:
这里种植的方程可能没有数学意义,但我的目标是在学校编程项目中用c#实现类似的方程式,我必须在其中实现一个包含积分的算法.我一直在读,有解决定积分的数值方法,如辛普森规则; 我是否必须使用这样的方法来实现等式,或者可以在编程中表示积分,例如循环或类似的东西?
我正在研究一个学校项目,我从Xcode那里得到了一些奇怪的错误.我正在使用TextMate的Command + R函数来编译项目.编译似乎工作正常但链接失败与我不明白的错误消息.
ld输出:
ld:在/path/final/build/final.build/Release/final.build/Objects-normal/ppc/generics.o和/ path/final/build/final中复制符号text_field(std :: basic_istream>&). build/Release/final.build/Objects-normal/ppc/main.o collect2:ld返回1退出状态
下面是我的文件io_functions.cpp这是整个项目中text_field的唯一声明.
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
#ifndef ENDF
#define ENDF '|'
#define ENDR '\n'
/**
reads one field from a given input stream
Usage: var = text_field(in)
*/
string text_field(istream &in){
string s;
getline(in, s, ENDF);
return s;
}
long long_field(istream &in){
return atol(text_field(in).c_str());
}
int int_field(istream &in){
return atoi(text_field(in).c_str());
}
double double_field(istream &in){
return atof(text_field(in).c_str());
}
#endif
Run Code Online (Sandbox Code Playgroud)
出了什么问题?出于多种原因,我不想发布我的项目的整个来源.
我甚至不知道该去哪里.谷歌不是很有帮助.和我之前的问题一样.我正在使用TextMate的Command + R来编译项目.
game.h:16:错误:'Player*HalfSet :: Player()const'的声明
players.h:11:错误:从'class Player'改变'Player'的含义
game.h:21:错误:'播放器'不是一种类型
player.h文件(部分)
#ifndef PLAYERS_H
#define PLAYERS_H
using namespace std;
#include <string>
#include <vector>
#include <istream>
#include <iomanip>
#include "generics.h"
class Player{ //Line 11
public:
//getters
long Id() const;
string FirstName() const;
string LastName() const;
string Country() const;
//setters
void setId(long id);
void setFirstName(string s);
void setLastName(string s);
void setCountry(string s);
//serializing functions
void display(ostream &out);
void read(istream &in);
void write(ostream &out);
//Initalizers
Player();
Player(istream &in);
Player(string firstName, string lastName);
Player(string firstName, string …Run Code Online (Sandbox Code Playgroud) 我有一些(遗留)代码,我第一次使用clang构建.代码类似于:
sprintf(buf, "%s <%s ????>", p1, p2);
Run Code Online (Sandbox Code Playgroud)
Clang发出以下警告(错误-Werror):
test.c:6:33: error: trigraph converted to '}' character [-Werror,-Wtrigraphs]
sprintf(buf, "%s <%s ????>", p1, p2);
^
Run Code Online (Sandbox Code Playgroud)
显然,这??>不是一个三元组,所以我想完全禁用三元组(源不会故意在任何地方使用它们).
我试过了,-no-trigraphs但这不是一个真正的选择:
clang: warning: argument unused during compilation: '-no-trigraphs'
Run Code Online (Sandbox Code Playgroud)
我可以关闭三元组警告,-Wno-trigraphs但我不希望实际发生三元组转换.
注意:Trigraphs被启用为使用的意外副作用-std=c89.