如何将指针(Object *ob)传递给原型的函数void foo(Object &)?
参数之间有什么区别:
int foo1(const Fred &arg) {
...
}
Run Code Online (Sandbox Code Playgroud)
和
int foo2(Fred const &arg) {
...
}
Run Code Online (Sandbox Code Playgroud)
?我没有看到parashift FAQ中涉及的这个案例.
这是一个简化的例子来说明这个问题:
class A {};
class B
{
B(A& a) : a(a) {}
A& a;
};
class C
{
C() : b(a) {}
A a;
B b;
};
Run Code Online (Sandbox Code Playgroud)
因此B负责更新C的一部分.我通过lint运行代码并且它围绕引用成员发出错误:lint#1725.这谈到了对默认副本和分配的关注,这是公平的,但默认的副本和赋值也很糟糕,所以那里没有什么优势.
我总是尽量使用引用,因为裸指针不确定地引入了谁负责删除指针.我更喜欢按值嵌入对象,但如果我需要一个指针,我在拥有指针的类的成员数据中使用auto_ptr,并将对象作为引用传递.
当指针可能为null或可能更改时,我通常只在成员数据中使用指针.有没有其他理由更喜欢指向数据成员的引用?
是否真的可以说包含引用的对象不应该是可赋值的,因为初始化后不应更改引用?
vector<int> v;
v.push_back(1);
v.push_back(v[0]);
Run Code Online (Sandbox Code Playgroud)
如果第二个push_back导致重新分配,则向量中对第一个整数的引用将不再有效.那么这不安全吗?
vector<int> v;
v.push_back(1);
v.reserve(v.size() + 1);
v.push_back(v[0]);
Run Code Online (Sandbox Code Playgroud)
这样可以安全吗?
假设我有一个函数,它需要std::function:
void callFunction(std::function<void()> x)
{
x();
}
Run Code Online (Sandbox Code Playgroud)
我应该x通过const-reference来代替吗?:
void callFunction(const std::function<void()>& x)
{
x();
}
Run Code Online (Sandbox Code Playgroud)
这个问题的答案是否会根据函数的作用而改变?例如,如果它是一个类成员函数或构造函数,它存储或初始化std::function成成员变量.
据我所知,没有理由不允许我在C++中传递对指针的引用.但是,我这样做的尝试失败了,我不知道为什么.
这就是我正在做的事情:
void myfunc(string*& val)
{
// Do stuff to the string pointer
}
// sometime later
{
// ...
string s;
myfunc(&s);
// ...
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
无法将参数1从'std :: string*'转换为'std :: string*&'
我不明白这个错误cannot move out of borrowed content.我收到了很多次,我总是解决它,但我从来没有理解为什么.
例如:
for line in self.xslg_file.iter() {
self.buffer.clear();
for current_char in line.into_bytes().iter() {
self.buffer.push(*current_char as char);
}
println!("{}", line);
}
Run Code Online (Sandbox Code Playgroud)
产生错误:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:31:33
|
31 | for current_char in line.into_bytes().iter() {
| ^^^^ cannot move out of borrowed content
Run Code Online (Sandbox Code Playgroud)
我通过克隆解决了这个问题line:
error[E0507]: cannot move out of `*line` which is behind a shared reference
--> src/main.rs:31:33
|
31 | for current_char in line.into_bytes().iter() {
| ^^^^ …Run Code Online (Sandbox Code Playgroud) 在我的drawable文件夹中,我有一些图像,它们都引用完美,但是当我尝试在同一文件夹中添加具有完全相同大小的任何更多图像,并尝试引用它时,标记错误"无法转换@ drawable/picture into a drawable".我尝试使用不同名称的相同图像,它只是一直给我错误.我也尝试过不同的XML布局和相同的东西.此外,图片的名称一直是"jack","abc","question_mark",你可以看到严格按照你可以使用的字符的规则,仍然会出现错误信息.对于如何解决问题,任何建议都会很棒,谢谢.
无法将@ drawable/picture转换为drawable
Python 中的字符串是不可变的,这意味着值不能更改。但是,当附加到以下示例中的字符串时,由于 id 保持不变,因此原始字符串内存看起来已被修改:
>>> s = 'String'
>>> for i in range(5, 0, -1):
... s += str(i)
... print(f"{s:<11} stored at {id(s)}")
...
String5 stored at 139841228476848
String54 stored at 139841228476848
String543 stored at 139841228476848
String5432 stored at 139841228476848
String54321 stored at 139841228476848
Run Code Online (Sandbox Code Playgroud)
相反,在以下示例中,id 发生变化:
>>> a = "hello"
>>> id(a)
139841228475760
>>> a = "b" + a[1:]
>>> print(a)
bello
>>> id(a)
139841228475312
Run Code Online (Sandbox Code Playgroud) 如何查找和删除项目中未使用的引用?
我知道您可以轻松删除vs 2008中的using语句,但这并不会删除项目中的实际引用.引用的dll仍将复制到bin/setup包中.