为什么在这个C ++代码中i == 0的值?

时间:2016-03-20 14:06:56

标签: c++ undefined-behavior

我对以下代码感到困惑:

#include <iostream>

int i = 1;
int main()
{
    int i = i;
    std::cout << "i: " << i << "\n";
    return 0;
}

输出

i: 0

我原本期望运行上面的代码会打印1。有人可以解释这种奇怪行为的原因吗?

1 个答案:

答案 0 :(得分:62)

您正在初始化ii中的int i = i;0都是内部的而不是外部的i。这是未定义的行为,您可能会遇到i任何

如果您想将外部#include <iostream> int i = 1; int main() { int i = ::i; std::cout << "i: " << i << "\n"; return 0; } 指定给内部org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator needs to work on [oracle.jdbc.OracleConnection], not on [org.apache.tomcat.dbcp.dbcp.PoolableConnection]: specify a corresponding NativeJdbcExtractor; nested exception is java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.PoolableConnection cannot be cast to oracle.jdbc.OracleConnection at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:547) ~[spring-jdbc-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.setClobAsString(OracleLobHandler.java:447) ,这是正确的方法。

lobHandler

Live Demo

BTW,您应该仔细阅读所有编译器警告。如果你这样做,你可以自己看到问题:

  

警告&#39;我&#39;在此函数中使用未初始化