【发布时间】:2011-04-23 04:16:48
【问题描述】:
在大量阅读ISO/IEC 14882, Programming language – C++ 之后,我仍然不确定为什么需要const 来隐式转换为具有如下单参数构造函数的用户定义类型
#include <iostream>
class X {
public:
X( int value ) {
printf("constructor initialized with %i",value);
}
}
void implicit_conversion_func( const X& value ) {
//produces "constructor initialized with 99"
}
int main (int argc, char * const argv[]) {
implicit_conversion_func(99);
}
从第 4 节第 3 行开始
表达式 e 可以隐式转换为类型 T 当且仅当声明 T t=e;对于一些发明的临时变量 t (8.5) 是良构的。某些语言结构要求将表达式转换为布尔值。出现在这种上下文中的表达式 e 被称为在上下文中转换为 bool 并且当且仅当声明 bool t(e);对于一些发明的临时变量 t (8.5) 是良构的。任一隐式转换的效果与执行声明和初始化,然后使用临时变量作为转换的结果相同。如果 T 是左值引用类型 (8.3.2),则结果为左值,否则为右值。当且仅当初始化将其用作左值时,表达式 e 才用作左值。
随后我在 8.5 第 6 行中找到了与用户定义类型相关的初始化程序部分
如果程序要求对 const 限定类型 T 的对象进行默认初始化,则 T 应是具有用户提供的默认构造函数的类类型。
最后,我在 12.3 第 2 行结束了关于用户定义转换的说明
用户定义的转换仅适用于明确的情况(10.2、12.3.2)。
不用说,10.2 和 12.3.2 没有回答我的问题。
- 有人能解释一下
const对隐式转换的影响吗? -
const的使用是否使转换在 12.3 第 2 行“明确”? -
const是否会影响第 4 节中讨论的左值和右值?
【问题讨论】:
-
你不只是喜欢 C++ 吗?
标签: c++ constructor constants implicit-conversion rvalue