sni*_*por 32 c++ reference friend
我是一个C++ noob,我在代码中理解c ++语法的问题.现在我很困惑.
class date
{
private:
int day, month, year;
int correct_date( void );
public:
void set_date( int d, int m, int y );
void actual( void );
void print( void );
void inc( void );
friend int date_ok( const date& );
};
Run Code Online (Sandbox Code Playgroud)
关于'&'字符,我理解它作为参考,地址和逻辑运算符的一般用法......
例如int*Y =&X
参数末尾的&运算符是什么意思?
friend int date_ok( const date& );
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑:
谢谢你的回答.如果我已经正确理解了这一点,那么变量名就被省略了,因为它只是一个原型.对于原型我不需要变量名称,它是可选的.那是对的吗?
但是,对于函数的定义我肯定需要变量名,对吧?
Ani*_*nge 39
const date&被方法接受date_ok意味着date_ok采用类型的引用const date.它的工作方式类似于指针,除了语法稍微多一点..含糖
在你的例子中,int* Y = &x创建Y一个类型的指针,int *然后为其分配地址x.当我想改变"无论它在地址指向的地方Y" 的价值时,我说*Y = 200;
所以,
int x = 300;
int *Y = &x;
*Y = 200; // now x = 200
cout << x; // prints 200
Run Code Online (Sandbox Code Playgroud)
相反,现在我使用参考
int x = 300;
int& Y = x;
Y = 200; // now x = 200
cout << x; // prints 200
Run Code Online (Sandbox Code Playgroud)
Lig*_*ica 24
在这种情况下,&不是运营商.它是该类型的一部分.
对于任何给定类型T,类型T&是"引用T".
&事实上,符号在C++中有三个含义,识别这些不同的含义很重要.
同样,*至少有三个含义,一旦你掌握了这些含义,你就会有指针和参考.:-)
如果我已经正确理解了这一点,那么变量名在那里被省略,因为它只是原型.对于原型我不需要变量名称,它是可选的.那是对的吗?
是.
但是,对于函数的定义我绝对需要变量名,对吧?
不会.虽然你通常会想要它(否则有什么意义?!)在某些情况下你不会这样做,通常当你只引入参数来引入与过载相关的技巧时.
但从技术上讲,您可以根据需要从声明和/或定义中省略参数名称.
因此,对于初学者,我认为你可能会更加困惑,因为该代码的作者省略了一些非常重要的东西(尽管是可选的):变量名.
让我们改写:
friend int date_ok( const date& check);
Run Code Online (Sandbox Code Playgroud)
变量'check'的类型是const date&.我们将它作为"常量引用"传递给函数.换句话说,它是我们传入的任何内容的别名(通过指针魔术),但我们无法修改它.
我们这样做的原因是我们可以将大对象(如a std::vector)传递给函数而不复制它们.按值传递会产生复制操作.对于一个int,无关紧要(它几乎没有时间),对于一个类来说,它可能更重要.经验法则是始终通过引用传递对象,并且如果您不打算修改它们,则通过const引用传递它们.(这个经验法则忽略了移动语义,但我假设你还不知道那个).
| 归档时间: |
|
| 查看次数: |
30625 次 |
| 最近记录: |