Sno*_*son 6 c++ gcc nullptr c++11 gcc4.7
我正在移植现有代码以在gcc 4.7.2下编译并且遇到了与nullptr的奇怪问题.我已经设法将其归结为一个简单的测试用例:
#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 );
}
Run Code Online (Sandbox Code Playgroud)
用g ++ test.cpp -o test -std = c ++ 0x编译它.
我期望的输出是"我在这里1",但我得到"原始值",表明从未调用过SetMarker.
调用Test2或Test3会得到预期的输出.
我正在使用的代码使用Test3中看到的模式 - 最初没有在NULL前面的强制转换 - 从int到char*的无效转换时出错,所以我开始将所有这些NULL更改为nullptr.不幸的是,这只是表现不正常.
我可能被迫更改代码以使用Test2中的模式(我更喜欢)但我很想知道这是否是编译器中的错误,或者我是否遗漏了某些东西.
这是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)上的新版本也应该有修复.
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |