介绍const、this的几个链接

本文详细介绍了C++中this指针的含义、用法及其在对象链式引用、避免赋值操作和数据结构实现中的应用。通过三个链接提供额外资源加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这三篇文章介绍const,说的都挺好
可以放在一起看
[url]http://blog.youkuaiyun.com/Eric_Jo/article/details/4138548[/url]
[url]http://www.bccn.net/Article/kfyy/cyy/jszl/200607/4166.html[/url]
[url]http://blog.youkuaiyun.com/clozxy/article/details/5679887[/url]

这篇文章介绍this指针
[url]http://www.cnblogs.com/hnrainll/archive/2011/05/20/2051939.html[/url]
this指针的含义及其用法:
1. this指针是一个[color=red]隐含于每一个成员函数中的特殊指针[/color]。它指向正在被该成员函数操作的那个对象。
2. 当对一个对象调用成员函数时,[color=red]编译程序先将对象的地址赋给this指针,然后调用成员函数[/color],每次成员函数存取数据成员时,由隐含使用this指针。
3. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。
4. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值;
在X类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
5. 由于this并不是一个常规变量,所以,不能取得this的地址。
6. 在以下场景中,经常需要显式引用this指针
(1) 为实现对象的链式引用(如例1);
(2) 为避免对同一对象进行赋值操作(如例2);
(3) 在实现一些数据结构时,如list.
<think>嗯,我现在需要回答关于Vue3中路由传参的问题,用户想要具体的示例代码和实战案例。首先,我得回忆一下Vue Router在Vue3中的使用方法,特别是传参的几种方式。根据之前看到的引用内容,传参主要有params、query和props三种方式。不过引用里提到的两种是params和query,可能第三种是通过props来传递的? 首先,我应该明确每种传参方式的特点。比如,params传参可以分为URL中显示参数和不显示参数两种情况,而query传参则是在URL中以查询字符串的形式出现,比如`?key=value`。另外,props传参可能是在组件中通过props接收参数,这样更符合组件化的思想。 接下来,我需要考虑在Vue3中如何配置路由。使用vue-router时,需要定义路由配置,可能是在router/index.js文件中。对于params传参,如果是显示在URL中的,需要在路由路径中定义参数占位符,比如`path: '/user/:id'`。而不显示参数的params可能需要使用命名路由,并且在跳转时不将参数放在URL中,但这种方式在刷新页面时参数会丢失,所以不太推荐? 然后是query传参,这个比较简单,直接附加在URL后面,不需要提前在路由配置中定义参数名。比如,跳转到`/user?id=123`,然后在目标组件中通过`route.query.id`获取。 关于props传参,可能需要将路由参数作为组件的props传递,这需要在路由配置中设置`props: true`,或者使用函数形式来自定义props。这样在组件中就可以像普通props一样使用这些参数了,提高组件的可复用性。 现在需要给用户示例代码,所以每个传参方式都要有对应的代码示例。比如,使用params传参时,路由跳转可以使用`router.push({ name: 'user', params: { id: 123 }})`,然后在目标组件中用`route.params.id`获取。但如果是显示参数的,路由路径需要定义`:id`,否则参数不会显示在URL中,可能需要注意这一点。 对于query传参,跳转时用`router.push({ path: '/user', query: { id: 123 }})`,这样URL会变成`/user?id=123`,然后在组件中用`route.query.id`获取。 props传参的话,在路由配置里设置`props: true`,这样route.params会被作为props传递到组件。或者可以设置`props: (route) => ({ id: route.query.id })`来将query参数转为props。然后在组件中定义props来接收。 实战案例可能需要一个完整的例子,比如用户列表跳转到用户详情页,传递用户ID,然后详情页展示用户信息。这时候可以用params或者query传参,或者通过props来接收。 另外,需要注意Vue3中的组合式API,比如使用`useRoute`和`useRouter`来获取路由信息和进行导航。在setup函数中,应该用这些hooks来访问路由对象,而不是`this.$router`或`this.$route`,因为Vue3中不再推荐使用this上下文。 还需要注意,当使用params传参且不显示在URL中时,必须使用命名路由进行跳转,否则参数可能无法正确传递。此外,如果用户刷新页面,params参数如果不在URL中就会丢失,而query参数仍然保留,因为它们在URL里。 现在,把这些整理成结构清晰的回答,分点说明每种传参方式,并给出代码示例。同时,生成相关问题,比如参数的区别、如何选择传参方式、参数安全问题等。 需要确保代码正确,比如在Vue3中,定义路由的方式是使用createRouter函数,并且模式是createWebHistory。组件的定义应该使用defineComponent,或者在setup语法糖中使用。示例代码需要符合这些规范,避免用户复制时出错。 最后,检查引用部分是否正确,引用的来源是否对应。例如,引用[1]提到params、query和props三种方式,而引用[2]讨论了params和query,所以需要正确标注引用标记。</think>### Vue3 路由传参方法及示例 在 Vue3 中,`vue-router` 提供了 **params**、**query** 和 **props** 三种传参方式,适用于不同场景。以下是具体方法及实战示例: --- #### 一、Params 传参(显示参数) **特点**:参数直接显示在 URL 中,需提前在路由配置中定义参数占位符。 **适用场景**:需要 SEO 友好或明确参数结构的页面(如用户详情页)。 1. **路由配置**: ```javascript // router/index.js const routes = [ { path: '/user/:id', name: 'User', component: () => import('@/views/User.vue') } ]; ``` 2. **跳转传参**: ```vue <!-- 组件中 --> <script setup> import { useRouter } from 'vue-router'; const router = useRouter(); const goToUser = () => { router.push({ name: 'User', // 必须用命名路由 params: { id: 123 } }); }; </script> ``` 3. **接收参数**: ```vue <!-- User.vue --> <script setup> import { useRoute } from 'vue-router'; const route = useRoute(); const userId = route.params.id; // "123" </script> ``` **结果 URL**:`/user/123`[^1][^2] --- #### 二、Query 传参(显示参数) **特点**:参数以 `?key=value` 形式附加在 URL 后,无需提前配置路由。 **适用场景**:筛选条件、分页等需要保留参数的可分享链接。 1. **跳转传参**: ```vue <script setup> const goToUser = () => { router.push({ path: '/user', query: { id: 123, role: 'admin' } }); }; </script> ``` 2. **接收参数**: ```vue <script setup> const route = useRoute(); const userId = route.query.id; // "123" const role = route.query.role; // "admin" </script> ``` **结果 URL**:`/user?id=123&role=admin` --- #### 三、Props 传参(隐式传参) **特点**:通过组件 `props` 接收参数,实现组件解耦。 **适用场景**:需要复用组件或避免直接依赖路由对象的场景。 1. **路由配置**: ```javascript const routes = [ { path: '/user/:id', name: 'User', component: () => import('@/views/User.vue'), props: true // 自动将 params 映射为 props }, { path: '/profile', name: 'Profile', component: () => import('@/views/Profile.vue'), props: (route) => ({ id: route.query.id }) // 自定义 props } ]; ``` 2. **组件接收参数**: ```vue <!-- User.vue --> <script setup> defineProps(['id']); // 直接通过 props 使用 </script> ``` --- #### 实战案例:用户列表跳转详情页 **场景**:从用户列表页传递用户 ID 到详情页,展示用户信息。 1. **列表页跳转**: ```vue <template> <button @click="viewDetail(user.id)">查看详情</button> </template> <script setup> const viewDetail = (userId) => { router.push({ name: 'User', params: { id: userId } }); }; </script> ``` 2. **详情页接收**: ```vue <!-- User.vue --> <template> <div>用户ID: {{ id }}</div> </template> <script setup> defineProps(['id']); // 通过 props 接收 </script> ``` --- ### 参数传递对比 | 方式 | URL 显示 | 刷新保留 | 路由配置要求 | 组件依赖 | |--------|----------|----------|--------------|----------------| | Params | ✔️ | ✔️ | 需定义占位符 | `route.params` | | Query | ✔️ | ✔️ | 无 | `route.query` | | Props | ❌ | 依赖来源 | 需配置映射 | 组件 `props` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值