我想让以下代码工作:
Mylist lst;
vector<int> v = lst;
Run Code Online (Sandbox Code Playgroud)
所以我看到我需要将列表转换为矢量.我试过这段代码:
vector<int> operator=(vector<int> v, const List & l) {
return v; // more profound stuff later :-)
}
Run Code Online (Sandbox Code Playgroud)
(把它放在课外).不幸的是Visual Studio抛出了我:"错误:'operator ='必须是成员函数".我不明白 - 我该怎么办?我不能把这个功能放在矢量类中......你可以帮帮我吗?谢谢!
c++ operator-overloading assignment-operator implicit-conversion operator-keyword
程序员大家好.我有一个关于静态的问题和在Java中使用这个例子的点运算符.
所以我在Inventory类中有一个ArrayList的类变量声明.
static List<Multimedia> list = new ArrayList<Multimedia>();
Run Code Online (Sandbox Code Playgroud)
如果我选择在方法中使用ArrayList的add方法,我应该像这样编写方法调用:Inventory.list.add(Object o)或者我应该使用list.add(Object o).他们的意思是一样的吗?如果不是,我应该使用哪种方法调用?
在我班上我有成员职能:
const bool operator&&(const KinematicVariable &right) const {
return this->isUsed() && right.isUsed();
}
inline const bool isUsed() const { return this->_used; }
Run Code Online (Sandbox Code Playgroud)
然后我试试
if (k1 && k2 && k3)
Run Code Online (Sandbox Code Playgroud)
但我明白了
error: C2677: binary '&&' : no global operator found which takes type
'KinematicVariable' (or there is no acceptable conversion)
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的类:
class A {
public:
A() {};
A& operator<< (A& a, unsigned int i);
private:
vector<int> abc;
}
Run Code Online (Sandbox Code Playgroud)
我想提供abc使用运算符添加对象的功能:
A a();
a << 3,4,5; // should do the same as several calls of abc.push_back(i)
Run Code Online (Sandbox Code Playgroud)
我知道我必须超载<<操作员,我是否还要超载,操作员?
实际方法怎么样?
我覆盖了一个+运算符:
Matrix& Matrix::operator+(Matrix m1)
{
//This should never be triggered
if(this->data.capacity() != m1.data.capacity() || this->data[0].capacity() != m1.data[0].capacity())
{
cout << "Dimensions don't match, can't add.\n";
throw 7;
}
vector<vector<double>> result;
result.resize(m1.data.capacity());
for(int i = 0; i < m1.data.size(); i++)
{
result[i].resize(m1.data[0].size());
for(int j = 0; j < m1.data[0].size(); j++)
{
result[i][j] = m1.data[i][j] + this->data[i][j];
}
}
return Matrix(m1.getRows(),m1.getCols(), result);
}
Run Code Online (Sandbox Code Playgroud)
这是相应的构造函数:
Matrix::Matrix(int rows, int cols, vector<vector<double>> data)
{
this->rows = rows;
this->cols = cols;
this->data = data;
}
Run Code Online (Sandbox Code Playgroud)
这是执行代码: …
function foo() {
return $result = bar() ? $result : false;
}
function bar() {
return "some_value";
}
foo();
Run Code Online (Sandbox Code Playgroud)
注意:未定义的变量:结果
这是一个错误吗?
bar()应该保存到$ result,但它不会.但是条件工作正常并且它试图返回$ result或false语句(如果bar()为NULL或false)
PHP 5.4.24
在C / C ++中,有一元减号运算符,它返回算术类型的加法逆(至少在大多数情况下),即
int x = 2, y = 2;
assert(x + (-x) == 0);
Run Code Online (Sandbox Code Playgroud)
从数学的角度来看,编写-x或0-x无关紧要,但是从程序员的角度来看,确实如此。通常,用于评估-x的指令序列与用于评估0-x的指令序列不同!尽管只是语法糖,但在C ++中使用一元减运算符确实有意义。那么一元运算符是否返回乘法逆,不是吗?但是,为什么C ++(像许多(大多数?所有?)语言一样)缺少这样的运算符?
编辑:
我的主要观点是,计算数字x的逆数(加法或乘法)不需要计算机处理中性元素(分别为0或1)。实际上,0和1对于计算机而言并非无关紧要的实体。对于浮点类型(例如C中的float或double),虽然评估0.0-x或1.0 / x相当“简单”(此处精度仍然是一个大问题),但总体上它可能变得相当复杂。喜欢多。精度浮点类型0.0-x比-x复杂得多,因此-x不仅方便,而且生成更有效的代码。另一方面,必须引入像inv(x)或x.inv()之类的函数或通过乘法实现相同的功能(乘法逆),而不是仅仅为1.0 / x编写/ x ...
代码很简单,我只想测试&和++之间的优先级.
int main()
{
int a=10;
int *p;
int *q;
p=&++a;//error: lvalue required as unary ‘&’ operand
q=&a++;//error: lvalue required as unary ‘&’ operand
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当gcc编译它时,出现了两个错误.在我看来,这a++是一个正确的值,但它++a是一个左值,因此在使用&获取它时,它不应该是一个错误,
对于像这样的表达式
x = a ? b : c ? d : e;
Run Code Online (Sandbox Code Playgroud)
我理解,因为?:运算符具有正确的关联性,所以表达式被分组为
x = a ? b : (c ? d : e);
Run Code Online (Sandbox Code Playgroud)
但是,评估顺序呢?结合性是否意味着首先评估(c?d:e)分支,然后它的答案作为参数传递给左?:运算符?或者首先进行评估,然后根据返回b或评估(c?d:e)分支?还是未定义?
我有一个hs文件,试图重载&&运算符
(&&)::Bool->Bool->Bool
True && x = x
False && _ = False
and' :: (Bool)->Bool
and' xs=foldr (&&) True xs
Run Code Online (Sandbox Code Playgroud)
在Prelude中导入时,出现错误:
Ambiguous occurrence ‘&&’
It could refer to either ‘Main.&&’, defined at D:\baby.hs:2:6
or ‘Prelude.&&’,
imported from ‘Prelude’ at D:\baby.hs:1:1
(and originally defined in ‘GHC.Classes’)
Run Code Online (Sandbox Code Playgroud)
所以我改变了最后一行
and' xs=foldr (Main.&&) True xs
Run Code Online (Sandbox Code Playgroud)
现在它打印新的错误消息:
Couldn't match expected type ‘t0 Bool’ with actual type ‘Bool’
In the third argument of ‘foldr’, namely ‘xs’
In the expression: foldr (Main.&&) True xs
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?谢谢.
operator-keyword ×10
c++ ×6
overloading ×2
arraylist ×1
c ×1
class ×1
conditional ×1
evaluation ×1
haskell ×1
java ×1
parsing ×1
php ×1
static ×1
ternary ×1