小编buc*_*buc的帖子

由不同编译器调用的不同强制转换操作符

考虑以下简短的C++程序:

#include <iostream>

class B {
public:
    operator bool() const {
        return false;
    }
};

class B2 : public B {
public:
    operator int() {
        return 5;
    }
};

int main() {
    B2 b;
    std::cout << std::boolalpha << (bool)b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果我在不同的编译器上编译它,我会得到各种结果.使用Clang 3.4和GCC 4.4.7打印true,而Visual Studio 2013打印false,这意味着它们调用不同的强制转换操作符(bool)b.根据标准,这是正确的行为?

在我的理解operator bool()需要转变,而operator int()将需要intbool转换,所以编译器应该选择第一个.是否const做一些与该是由编译器认为更"贵"常量转换?

如果我删除了const,所有编译器同样产生false输出.另一方面,如果我将两个类组合在一起(两个运算符将在同一个类中),则所有三个编译器都将生成true输出.

c++ language-lawyer

79
推荐指数
2
解决办法
2449
查看次数

jar 文件运行时不创建 Log4j 日志

这是我用来测试 log4j 的学生课程。

public class Student{    
    private static final Logger logger = Logger.getLogger(Student.class.getName());   

    public Student() {  
         PropertyConfigurator.configure("log4j.properties");  
    }

    public static void main(String args[]){  
        logger.log(Level.INFO, "My log4j Test");    
    } 
}
Run Code Online (Sandbox Code Playgroud)

这是我的log4j.properties文件

log4j.rootLogger=INFO,Appender1,Appender2
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender2=org.apache.log4j.RollingFileAppender
log4j.appender.Appender2.File=C:/Log4j/MyLogExample.log

log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout`  
log4j.appender.Appender1.Target=System.out`   
log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n`  

log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout`  
log4j.appender.Appender2.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n`  

log4j.appender.Appender2.MaxFileSize=50KB`  
log4j.appender.Appender2.MaxBackupIndex=10` 
Run Code Online (Sandbox Code Playgroud)

当我使用 Eclipse 运行该程序时,会创建MyLogExample.log文件。但是,在我创建 jar 文件并使用命令提示符运行它之后,未创建日志文件。

在控制台中我可以看到这个错误。

log4j:ERROR Could not read configuration file [log4j.properties]. 
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified) …
Run Code Online (Sandbox Code Playgroud)

java log4j

5
推荐指数
1
解决办法
1万
查看次数

删除多个换行符

如何从字符串中删除多个换行符,以便我只获得一个换行符.例如,我有一个字符串"\r\n\r\n\r\n\r\n\r\n\r\n\r\n",我怎么能把它变成一个'\n'

java

5
推荐指数
1
解决办法
4787
查看次数

NetLogo - 如何显示乌龟的当前坐标

我已经尝试了很长一段时间来显示NetLogo中乌龟的当前坐标.我知道要显示其中一个坐标,我可以使用:

show [xcor] of turtle 0
Run Code Online (Sandbox Code Playgroud)

要么

show [ycor] of turtle 0
Run Code Online (Sandbox Code Playgroud)

但是如何显示两个坐标呢?

谢谢.

netlogo

4
推荐指数
1
解决办法
9781
查看次数

在main方法之外创建对象时出现stackoverflow错误

运行此代码时,它显示Stackoverflow错误.我做错了什么,为什么代码编译?

public class Foo {
    int a = 5;
    Foo f = new Foo();

    void go() {
        System.out.println(f.a);
    }

    public static void main(String[] args) {
        Foo f2 = new Foo();
        f2.go();
    }
}
Run Code Online (Sandbox Code Playgroud)

java stack-overflow

3
推荐指数
1
解决办法
2331
查看次数

schemagen ant task忽略package-info.java

方案如下:我有一个java包(myapp.config),它包含我所有的JAXB注释类,我想从中生成一个XML模式文件.在包中,还有一个package-info.java文件,它在包元素上包含@XmlSchema注释,因此在整个包中有效:

@XmlSchema(namespace="http://myapp/config",
           xmlns = @XmlNs(prefix="myapp", namespaceURI="http://myapp/config"),
           elementFormDefault=XmlNsForm.QUALIFIED)
package myapp.config;
Run Code Online (Sandbox Code Playgroud)

当我运行JDK附带的schemagen命令行工具时,

D:\Projects\Myapp>"%JAVA_HOME%/bin/schemagen" -cp "%JAVA_HOME%/lib/tools.jar"
src/myapp/config/*.java
Run Code Online (Sandbox Code Playgroud)

我得到了正确的结果:生成的schema1.xsd文件中的根元素包含targetNamespace和其他必要的属性:

<xs:schema elementFormDefault="qualified" version="1.0"
           targetNamespace="http://myapp/config"
           xmlns:tns="http://myapp/config"
           xmlns:myapp="http://myapp/config">
           xmlns:xs="http://www.w3.org/2001/XMLSchema" >
Run Code Online (Sandbox Code Playgroud)

但是,当我想在我的Ant脚本中执行相同的任务时,

<schemagen srcdir="src/myapp/config" destdir="dist">
    <include name="*.java"/>
</schemagen>
Run Code Online (Sandbox Code Playgroud)

schemagen工具似乎完全忽略了命名空间注释,因为在生成的schema1.xsd文件中,没有它们的痕迹:

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
Run Code Online (Sandbox Code Playgroud)

当我以详细调试模式运行schemagen任务时,很明显该工具会加载除package-info.java之外的所有.java文件,这就是为什么它不知道命名空间的原因.

你以前遇到过这种奇怪的行为吗?为什么命令行工具处理包信息文件,而Ant任务不处理?我该怎么做才能使Ant任务工作?

提前谢谢,
buc

ant jaxb jaxb2 schemagen

2
推荐指数
1
解决办法
3088
查看次数

Android DTMF发送音调覆盖

我尝试以编程方式在Android中发送DTMF音.但是模拟器会显示一个对话框,上面写着"你想发送这些音吗?" 它只在我点击OK时发送音调.但是,我如何以编程方式克服此对话框?

格拉西亚斯

android telephony dtmf

-1
推荐指数
2
解决办法
1万
查看次数

对不同类型的变量进行分组 Java 要求

场景是这样的:

class Graph{
    // Now many variables

    Node masterUser;
    Node masterFilter;
    Node masterLocation;

    Index indexUser;
    Index indexFilter;

    Graph() {
        // INITIALIZE ALL Variables Here
    }
}


// SubClass

class MyClass{

    Graph graph = new Graph();

    // NOW I Can refer all class members of Graph class here by graph Object

}
Run Code Online (Sandbox Code Playgroud)

现在发生的事情是,当我这样做时,graph.所有成员都将可以访问。

但我想对 Graph 类的变量进行分组,这样

当用户这样做时graph.Index.,只有所有内容都Index可以访问。当用户graph.Nodes.这样做时,只有所有Nodes 都可以访问。

我该怎么做?

java

-3
推荐指数
1
解决办法
1925
查看次数