【发布时间】:2012-11-15 09:02:06
【问题描述】:
假设我有这段代码。
#include <string>
int main()
{
std::string(0);
return 0;
}
编写std::string(0) 会导致调用std::basic_string<char>::basic_string(const char*),并将0 作为此构造函数的参数,该构造函数尝试将参数视为指向C 字符串的指针。
运行此代码显然会导致std::logic_error 被抛出。但我的问题是:为什么 GCC 和 MSVC 8.0 都不发出任何警告?我希望看到类似于“从不进行强制转换的整数制作指针”的内容。
【问题讨论】:
-
因为
0是一个空指针常量,而且大概没有人认为警告值得付出努力(真的,有人多久会写一次这样的东西?) -
演员阵容有什么帮助?这同样是荒谬的
-
我想我在 C 年一定已经习惯了这个警告。用
gcc编译int *x = 5会导致发出“初始化使指针从整数不进行强制转换”。 -
因为用空指针初始化指针是非常非常常见的,绝不会出错。添加警告会导致每个程序发出大量警告。
-
“运行此代码显然会导致
std::logic_error被抛出”——顺便说一句,这不能保证,您的代码具有未定义的行为。
标签: c++ compiler-construction stl compiler-warnings