gpt4 book ai didi

c++ - 使用 Clang 构建 C++ 静态库时的奇怪行为

转载 作者:搜寻专家 更新时间:2023-10-31 00:37:07 25 4
gpt4 key购买 nike

我目前在最新的 OSX 上使用 Clang 在 C++11 中构建静态库,遇到了一些对我来说似乎很奇怪的事情。

我有继承自 A 和 B 的类 C。A 用作该类用户的公共(public)接口(interface),B 用作抽象实现,持有 A 的所有实例共有的方法。我来自Java 世界,所以我将 A 视为接口(interface),将 B 视为抽象类。

在 C 类中,我有一个继承自 B 的方法,该方法调用 C 中定义的两个私有(private)方法。奇怪之处就在于此。如果我像这样实现继承的方法:

bool EPubParser::isCorrectFileType() {
bool has_correct_file_type = false;
bool is_compressed_file = this->isCompressedFile();
if (this->hasRightExtension() && is_compressed_file) {
has_correct_file_type = true;
}

if (has_correct_file_type) {
LOG(DEBUG)<< "Has correct file type. " << endl;
} else {
LOG(DEBUG)<< "Does not have correct file type. " << endl;
}
return has_correct_file_type;
}

一切正常。我可以看到正在调用 this->isCompressedFile() 中的日志语句。如果我删除临时变量 is_compressed_file 并直接在条件中调用 this->isCompressedFile(),它们就不会被调用。就好像这个方法不存在一样。

我是不是漏掉了一些关于 C++ 的东西?这是一个 Clang 错误吗?我的 Java 背景让我感到困惑吗?

最佳答案

如果您直接调用 isCompressedFile() 作为 && 运算符的第二个操作数,只有当第一个操作数为 true 时才会执行> - C++ bool 运算符是短路的(但我相信这同样适用于 Java)。

关于c++ - 使用 Clang 构建 C++ 静态库时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397532/

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