我注意到我通常使用常量引用作为返回值或参数.我认为原因是它与在代码中使用非引用几乎相同.但它肯定需要更多的空间和功能声明变得更长.我很喜欢这样的代码,但我认为有些人发现它编程风格很糟糕.
你怎么看?是否值得编写const int& over int?我认为无论如何它都是由编译器优化的,所以也许我只是在浪费时间编码,一个?
我在Pycharm有一个项目组织如下:
-- Sources
|--__init__.py
|--Calculators
|--__init__.py
|--Filters.py
|--Controllers
|--__init__.py
|--FiltersController.py
|--Viewers
|--__init__.py
|--DataVisualization.py
|--Models
|--__init__.py
|--Data
Run Code Online (Sandbox Code Playgroud)
我的所有__init__.py,除了Sources上面的那个都是空白文件.我收到了很多类似的警告:
在__init__.py中找不到引用'xxx'
例如,我的FiltersController .py有这段代码:
import numpy.random as npr
bootstrap = npr.choice(image_base.data[max(0, x-2):x+3, max(0, y-2):y+3].flatten(), size=(3, 3), replace=True)
Run Code Online (Sandbox Code Playgroud)
我收到这个警告:
在__init__.py中找不到引用'choice'
我在谷歌上搜索这是什么意思,我应该怎么做才能在Python中正确编码.
先感谢您.
因此,我意识到const T&并且T const&它们是相同的并且都意味着对const T的引用.在这两种情况下,引用也是常量的(与指针不同,引用不能被重新分配).我观察到,在我有点经验的情况下,大多数C++程序员都会使用const T&,但我遇到过一些使用过的人T const&.我const T&之所以使用它只是因为我学到了这一点,所以T const&对我来说看起来有点滑稽.您使用您使用的变体的原因是什么?你们中的任何一个人是否在一个组织工作,其编码标准要求使用一种变体而不是另一种变体?
编辑
根据答案,看来在两者之间进行选择的一个原因是你是想要像编译器(从右到左)还是像英语(从左到右)那样阅读它.如果像编译器一样读取它,则"T const&"读作"&(引用)const(到常量)T(类型T)".如果从左到右读取它像英语,则"const T&"被读作"以引用形式存在的T类型的常量对象".我更喜欢像英文散文一样阅读它,但我当然可以通过编译器的方式来理解它.
没有人回答组织或编码标准问题,但我强烈怀疑大多数组织不会强制要求一个,尽管他们可能会努力保持一致性.
假设我有以下数据结构:
var user = {_id: 'foo', age: 35};
var post = {_id: '...', author: {$ref: user, $id: 'foo'},...};
Run Code Online (Sandbox Code Playgroud)
如何查询引用用户[foo]的所有帖子?我尝试了以下但不工作:
db.post.find('author._id': 'foo');
var u = db.user.find({_id: 'foo'});
db.post.find('author': u);
Run Code Online (Sandbox Code Playgroud)
我也无法从官方文档和谷歌找到答案!
任何人有任何想法?
我在互联网上阅读不同的东西并感到困惑,因为每个网站都说不同的东西.
谈到C.
我读到了*引用运算符&和解引用运算符; 或者引用意味着使指针指向变量,并且解除引用正在访问指针指向的变量的值.所以我很困惑.
我是否可以获得有关"引用和取消引用"的简单但彻底的解释?
std::tie(a, b) = std::minmax(a, b);
Run Code Online (Sandbox Code Playgroud)
我认为这是直观的代码。干净易懂。太糟糕了,它作为的std::minmax模板无法正常工作const&。因此,如果在内部交换值,则std::pair<const&, const&>一个分配将覆盖另一个值:
auto[a, b] = std::make_pair(7, 5);
std::tie(a, b) = std::minmax(a, b);
std::cout << "a: " << a << ", b: " << b << '\n';
Run Code Online (Sandbox Code Playgroud)
a:5,b:5
此处的预期输出为a: 5, b: 7。
我认为这很重要,因为实现转换功能以将功能应用于某些范围需要直观的lambda声明。例如:
std::vector<int> v{ 0, 1, 0, 2, 0 };
std::vector<int> u{ 1, 0, 1, 0, 1 };
perform(v.begin(), v.end(), u.begin(), [](auto& a, auto& b){
std::tie(a, b) = std::minmax(a, b);
});
//v would be == {0, 0, …Run Code Online (Sandbox Code Playgroud) 我有一个项目,通过他们的API为另一个应用程序添加一些可扩展性.但是,我希望能够为其应用程序的多个版本使用相同的项目,因为大多数代码都是相同的.
但是,每个版本的应用程序都需要引用该版本软件的正确程序集.他们将程序集加载到GAC中,所以即使我可以根据构建配置指定要使用的程序集的版本,我也没关系.有没有办法从VS内部执行此操作,还是需要外部构建工具?
显然,对于我的代码访问对象,必须至少有一个引用它.但我想知道的是,是否有任何其他引用,或者我的代码是唯一访问它的地方.如果没有别的东西引用它,我希望能够删除该对象.
如果您知道答案,则无需阅读本问题的其余部分.以下只是一个让事情更加清晰的例子.
在我的应用程序中,我有一个Repository名为的对象实例contacts,其中包含所有联系人的数组.还有多个Collection对象实例,例如 friends集合和coworkers集合.每个集合都包含一个数组,其中包含一组不同的项目contacts Repository.
为了使这个概念更具体,请考虑下面的代码.Repository对象的每个实例都包含特定类型的所有项的列表.您可能拥有联系人存储库和单独的事件存储库.为了简单起见,您可以获取,添加和删除项目,并通过构造函数添加许多项目.
var Repository = function(items) {
this.items = items || [];
}
Repository.prototype.get = function(id) {
for (var i=0,len=this.items.length; i<len; i++) {
if (items[i].id === id) {
return this.items[i];
}
}
}
Repository.prototype.add = function(item) {
if (toString.call(item) === "[object Array]") { …Run Code Online (Sandbox Code Playgroud) 这是一个过去的考试问题,我想知道什么是原始类型和参考类型?使用数组我知道引用类型是数组由对象或变量组成的位置,但是基本类型是用int或string创建数组的地方.(对?)
您认为您如何回答测试中的问题并获得良好的信誉?没有真正直接引用原始ARRAY类型......有没有办法在没有它的情况下做到这一点?或者你认为用阵列解释它会没问题.
我在函数声明中多次发现这些符号,但我不知道它们是什么意思.
例:
void raccogli_dati(double **& V, double **p, int N) {
int ultimo = 3;
V = new double * [N/2];
for(int i=0; i < N/2; i++) {
V[i] = new double[N/2], std :: clog << "digita " << N/2 - i
<< " valori per la parte superiore della matrice V: ";
for(int j=i; j < N/2; j++)
std :: cin >> V[i][j], p[ultimo++][0] = (V[i][j] /= sqrt(p[i][0]*p[j][0]));
}
for(int i=1; i < N/2; i++)
for(int j=0; j < …Run Code Online (Sandbox Code Playgroud)