返回空字符串文字VS。返回nullptr-是否相同?

问题描述 投票:0回答:1

我最近在我正在处理的应用程序的公共SDK中遇到以下功能:

virtual char* ExtentName() {return "";}

[当我使用带有/permissive-标志的Visual Studio编译应用程序时,上面的函数导致以下编译错误:

error C2440: 'return': cannot convert from 'const char [1]' to 'char *'
note: Conversion from string literal loses const qualifier (see /Zc:strictStrings)

我真的很惊讶在任何情况下都可以编译该代码,因为它会将字符串文字(在这种情况下为空终止符)转换为char*。那怎么可能?

此外,我想在不导致SDK中断的情况下解决此问题。这是我认为最好的解决方案:

virtual char* ExtentName() {return nullptr;}

上面的更改不会破坏ABI,但是我不确定它会破坏我们用户的代码,尽管我不确定如何做。那有可能吗?感谢您提供任何信息!

c++ sdk abi nullptr
1个回答
0
投票

自C ++ 11起不允许隐式地将字符串文字不带char*限定符的情况下投射到const

MSVC仍然允许它具有向后兼容性,因为早期版本的C ++允许它。 /permissive-标志使其行为符合标准。

© www.soinside.com 2019 - 2024. All rights reserved.