gpt4 book ai didi

c++ - 函数头中的条件运算符 "?:"和 LPCTSTR

转载 作者:可可西里 更新时间:2023-11-01 17:37:53 26 4
gpt4 key购买 nike

也许任何人都可以向我解释一下:

bool Func1(LPCTSTR sData)
{
if (sData) { ... }
}

我这样调用函数:

CString str = _T("");
Func1((str.IsEmpty() ? NULL : str));

并且函数内部的'sData'永远不会为NULL,它总是空字符串而不是NULL,为什么?编辑代码如下:

LPCTSTR strNull = NULL;
Func1((str.IsEmpty() ? strNull : str));

在这种情况下它工作正常。

最佳答案

这是由于需要将第二个和第三个操作数都转换为通用类型造成的。
(根据条件是否为真,结果不能有不同的类型。)

第一个参数相当于

str.IsEmpty() ? CString(NULL) : str

因为 NULL 没有您可以将 CString 转换成的类型。
CString(NULL) 构造一个空的 CString

第二个相当于

str.IsEmpty() ? strNull : (LPCTSTR) str

因为 CString 可以转换为 LPCTSTR 但不能反过来。

内联 Actor ,

    str.IsEmpty() ? (LPCTSTR) NULL : str

应该产生与第二个相同的效果。

关于c++ - 函数头中的条件运算符 "?:"和 LPCTSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39372044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com