编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,
language-agnostic heap stack memory-management dynamic-memory-allocation
C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
在完美转发中,std::forward用于转换命名的右值引用t1和t2未命名的右值引用.这样做的目的是什么?inner如果我们离开t1&t2作为左值,那将如何影响被调用的函数?
template <typename T1, typename T2>
void outer(T1&& t1, T2&& t2)
{
inner(std::forward<T1>(t1), std::forward<T2>(t2));
}
Run Code Online (Sandbox Code Playgroud) 我对C++很陌生,所以在我学习的时候,我倾向于设计很多Java主义.无论如何,在Java中,如果我的类具有"搜索"方法,该方法T将从Collection< T >匹配特定参数的对象返回一个对象,我将返回该对象,如果在集合中找不到该对象,我将返回null.然后在我的调用函数中,我会检查if(tResult != null) { ... }
在C++中,我发现null如果对象不存在,我就无法返回值.我只想返回一个类型为T的'指示符',它通知调用函数没有找到任何对象.我不想抛出异常,因为它并不是一个特例.
这就是我的代码现在的样子:
class Node {
Attr& getAttribute(const string& attribute_name) const {
//search collection
//if found at i
return attributes[i];
//if not found
return NULL; // what should this be?
}
private:
vector<Attr> attributes;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变它以便我能给出那种标记?
有什么区别
int x=7;
Run Code Online (Sandbox Code Playgroud)
和
register int x=7;
Run Code Online (Sandbox Code Playgroud)
?
我正在使用C++.
C++引用有两个属性:
指针是相反的:
为什么C++中没有"不可为空,可重复的引用或指针"?我想不出为什么参考不应该是可重复的一个很好的理由.
编辑: 问题经常出现,因为我通常使用引用,当我想确保"关联"(我在这里避免使用"引用"或"指针")永远无效.
我认为我从没想过"这个引用始终指的是同一个对象".如果引用是可重用的,那么仍然可以得到当前的行为:
int i = 3;
int& const j = i;Run Code Online (Sandbox Code Playgroud)
这已经是合法的C++,但毫无意义.
我重申我的问题: "'引用的背后是什么原因是对象'设计?为什么引用始终是同一个对象,而不是仅当声明为const时才被认为是有用的?"
干杯,菲利克斯
那些之间是否有某种微妙的区别:
void a1(float &b) {
b=1;
};
a1(b);
Run Code Online (Sandbox Code Playgroud)
和
void a1(float *b) {
(*b)=1;
};
a1(&b);
Run Code Online (Sandbox Code Playgroud)
?
它们都是相同的(或者看起来似乎来自main()),但第一个显然更短,但我看到的大部分代码都使用第二种表示法.有区别吗?也许万一它是一些对象而不是浮动?
在我大学的C编程课程中,教授及其后来的书在引用C中的指针时使用了术语调用或通过引用传递.
我的教授称之为"参考函数调用"的一个例子:
int sum(int *a, int *b);
Run Code Online (Sandbox Code Playgroud)
我的教授称之为"价值函数呼叫"的一个例子:
int sum(int a, int b);
Run Code Online (Sandbox Code Playgroud)
我读过 C不支持通过引用调用.根据我的理解,指针通过值传递.
基本上,说指针是C通过引用传递的方式是不正确的吗?说你不能通过C中的引用传递但是可以使用指针替代它会更正确吗?
2015年11月11日更新
从我的问题起源的方式来看,我认为术语的争论已经产生,实际上我看到了两个具体的区别.
在阅读了@Haris的更新答案之后,为什么这不是那么黑白,这是有道理的.