首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcc nullptr问题

gcc nullptr问题
EN

Stack Overflow用户
提问于 2013-04-10 17:45:46
回答 1查看 1.6K关注 0票数 6

我正在移植现有的代码,以便在gcc 4.7.2下编译,并且遇到了一个奇怪的nullptr问题。我已经设法将其归结为一个简单的测试用例:

代码语言:javascript
复制
#include <stdio.h>

const char* g_marker = "Original value";

void SetMarker( const char* s )
{
    g_marker = s;
}

char* Test1()
{
    return SetMarker( "I was here 1" ), nullptr;
}

char* Test2()
{
    SetMarker( "I was here 2" );
    return nullptr;
}

char* Test3()
{
    return SetMarker( "I was here 3"), (char*)NULL;
}

int main()
{
    char* returnValue = Test1();
    printf( "%s\n", g_marker );
}

使用g++ test.cpp -o测试-std=c++0x编译此代码。

我期望的输出是"I was here 1",但我得到的是"Original value",这表明SetMarker从未被调用过。

调用Test2或Test3都可以得到预期的输出。

我正在使用的代码使用了在Test3中看到的模式-最初在NULL前面没有强制转换-在从int到char*的无效转换中给出了一个错误,所以我开始将所有这些NULL更改为nullptr。不幸的是,这就是不正确的行为。

我可能会被迫更改代码以使用Test2中的模式(无论如何我更喜欢这样),但我很好奇这是不是编译器中的一个bug,或者我是否遗漏了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 18:06:50

这是g++中的一个错误:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52988

g++在nullptr_t类型的表达式中丢弃了副作用,前提是所有的nullptr_t值都是相等的(它们是相等的,但这并不意味着您可以忽略副作用!)

在4.8.0版本中已修复此问题;4.x分支(4.6.4和4.7.3)上的新版本也应具有此修复。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15922380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档