我最近在我正在处理的应用程序的公共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 ++ 11起不允许隐式地将字符串文字不带char*
限定符的情况下投射到const
。
MSVC仍然允许它具有向后兼容性,因为早期版本的C ++允许它。 /permissive-
标志使其行为符合标准。