将NULL作为对象返回时没有收到任何警告

时间:2016-04-24 19:44:09

标签: c++ g++ warnings compiler-warnings clang++

我不明白为什么我没有收到警告(使用g ++或clang ++)来在下面的newtstr()中将NULL作为对象返回:

#include<iostream>
using namespace std;

string newstr();

int main()
{
        string s = newstr();
        cout << s << endl;
        return 0;
}

string newstr()
{
        return NULL;
}

$ g++ -Wall -Wextra -pedantic testptr.cpp
$
但是,我确实遇到了运行时错误:

$ ./a.out
terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid
Aborted
$

$ g++ --version
g++ (GCC) 4.8.0

1 个答案:

答案 0 :(得分:7)

std::string有一个constructor basic_string( const CharT* s, const Allocator& alloc = Allocator() );,它接受​​const char*指针来构造一个新字符串(参见(5))。行return NULL;导致对该构造函数的隐式调用,其中NULL指针作为参数 - 这是有效的代码但显然不能正确运行。