【发布时间】:2023-04-02 09:41:01
【问题描述】:
令我惊讶的是,这编译:
const char* c_str()
{
static const char nullchar = '\0';
return nullchar;
}
它在我的代码中引入了一个错误。谢天谢地,我抓住了它。
这是 C++ 故意的,还是编译器错误?主动忽略数据类型是否有原因?
它在 Visual C++ 2010 和 GCC 中工作,但鉴于明显的数据类型不匹配,我不明白为什么它应该工作。 (static 也不是必需的。)
【问题讨论】:
-
你是按照C++03编译的吗?
-
@ta.speot.is:我认为这与 CPU 架构无关......
-
当然 C++98 确实有编译时常量表达式的概念。
-
@Mehrdad @Mehrdad
constexpr无论如何都是 C++11 特定的......但const变量是 C++03 标准第 5.19.1 节的常量表达式...... integral constant-expression 只能涉及字面量 (2.13)、枚举器、const变量或整数或枚举类型的静态数据成员,用常量表达式 (8.5)、非类型模板初始化整数或枚举类型的参数,以及sizeof表达式。 -
@ta.speot.is "也许指针是 64 位的?" 大小不是问题。
标签: c++ implicit-conversion type-safety