- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我找到了下面的例子 here .显然,代码片段中的注释是错误的,因为变量 S::x
被表达式 &S::x
使用了 odr。
struct S { static const int x = 1; };
void f() { &S::x; } // discarded-value expression does not odr-use S::x
int main(){
f();
}
参见 live example
我知道编译器不需要发出这样的错误,因为 [basic.def.odr]/10说“不需要诊断”。但是为什么链接器没有像下面的代码那样发出关于 undefined variable S::x
的错误?
#include<iostream>
struct S { static const int x = 1; } s;
int main() {
std::cout << &s.x << '\n';
}
参见 live example .
最佳答案
But why doesn't the linker emit an error about the undefined variable S::x, as it does in the code below?
因为简直优化掉了!结果从未使用且没有副作用的表达式将被忽略。被忽略的内容不得链接进来。根本没有引用该变量的代码,即使它的地址已被获取但随后未被使用也是如此。
如您的 wandbox 示例所示,编译器发出正确的诊断信息:“未使用的表达式结果”。
未使用的代码以后不会导致链接器错误;)
您的第二个示例使用值(var 的地址),因此需要计算表达式。这会向链接器发出代码,其中无法在任何地方找到地址符号。
关于c++ - 为什么链接器不会在下面的代码中发出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50585644/
我有一个经典的 ASP 页面 (VBscript),它在服务器端生成 XML,然后 Response.Writes。该页面根本没有客户端。 但是我需要将其转换为 JSON。由于我找不到有效的 ASP
我想从客户端应用程序的 HDFS 中读取特定的 SequenceFile。我可以使用 SequenceFile.Reader 来做到这一点,它工作正常。但是是否也可以通过分析抛出的 IOExcepti
我是一名优秀的程序员,十分优秀!