【发布时间】:2015-01-05 06:38:46
【问题描述】:
这是我一直对 C++ 语言感兴趣的地方。随着“const”标识符的出现,它应该取代使用#define 语句来声明常量。但正如我所说的使用它们,我最终陷入了 const char 到 char 转换错误的疯狂。
最近,我说在类常量中做,就像在 Java 中做的一样。所以我决定声明这样的东西。
private: const static int NB_FIELD = 22;
这非常有效。返回 int 的函数可以毫无问题地返回“const int”。
但是现在如果我尝试对这样的字符串做同样的事情:
private: static const char ERRORSTR [ 6 ];
其中包含字符串“Error”,会产生类似此函数中的 const char 到 char 转换问题。
char* EnhancedSQLobject::get_SQLname ( int index )
{
if ( index < p_nb_field && index >= 0 )
return ( p_SQLfield_ptr [ index ] . SQLname)
return ( ERRORSTR );
}
现在有人会说更改 const char* 的返回值,但我不能,因为如果索引有效,它将返回一个非常量变量,但如果索引无效,它将返回一个常量错误细绳。
所以我的选择是要么使错误字符串非常量,要么使用#define 语句创建一个常量。我记得很久以前试图将所有内容定义为 const char,但最终它在转换链中的其他地方爆炸了。让使用常规 char 变得更容易(String 类对我来说不是一个选项)
这简直太荒谬了,为什么要实现一个只适用于部分变量类型的功能。我想这与字符串实际上是字符表有关,因此它可能返回一个指针而不是一个值。
【问题讨论】:
-
"这太荒谬了,为什么要实现一个只对部分变量类型有效的功能。" - 实际上,这不是正在发生的事情。在一种情况下,您正在谈论将
const int转换为int,但在另一种情况下,您正在谈论将const char*转换为char*,这增加了间接级别。 -
您将非指针类型与指针类型进行比较。
T不能与T2 *进行比较,假设T和T2是基本类型。 -
在一种情况下,
int被复制。另一种是复制指针,既然指向常量数据,为什么要转换呢? -
出错时返回 nullptr。问题已解决。 :-) 不管怎样,
const的主要用途不是替换defines 来定义常量。它的主要用途是保证函数不会修改调用者的参数副本(当通过引用或指针传递时)。 -
"您将非指针类型与指针类型进行比较。" - 和我想的一样。如果我对单个字符做同样的事情,那将不是问题。
标签: c++ char int type-conversion constants