小编Mar*_*ork的帖子

为什么"final static int"可以用作switch的case常量而不是"final static <your enum>"

为什么这个int开关有效:


public class Foo {
    private final static int ONE = 1;
    private final static int TWO = 2;

    public static void main(String[] args) {
        int value = 1;
        switch (value) {
            case ONE: break;
            case TWO: break;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

虽然这个枚举开关不是:


import java.lang.annotation.RetentionPolicy;

public class Foo {
    private final static RetentionPolicy RT = RetentionPolicy.RUNTIME;
    private final static RetentionPolicy SRC = RetentionPolicy.SOURCE;

    public static void main(String[] args) {
        RetentionPolicy value = RetentionPolicy.RUNTIME;
        switch (value) {
            case RT: break;
            case SRC: …
Run Code Online (Sandbox Code Playgroud)

java enums constants case switch-statement

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

std :: cout是缓冲的吗?

只是阅读"斯科特迈耶斯"的一篇古老但有趣的文章

http://aristeia.com/Papers/C++ReportColumns/novdec95.pdf

基本上它是关于宁愿使用'\n'std::endl(我同意,并使用相同的扩充年).

但是最后一部分表明这不包含在他的书中,因为整个事情由于两点而变得没有实际意义:

  1. std::cout 没有缓冲.
  2. ios::unitbuf未明确定义on std :: cout 的状态(因此依赖于实现).

我做了一个快速查看,但找不到明确的标准参考1是真的.是否std::cout与我一直以来的理解相反?

c++ cout

20
推荐指数
3
解决办法
6355
查看次数

是否有人在C++的高级标准库上工作

STL/Boost涵盖所有低级别的东西.

但是更高层次的概念呢?

Windows:我们有多个窗口库

  • KDE(QT)
  • 地精
  • 主题(C但以OO风格书写)
  • MS Windows
  • 等等

但有人在制定统一的窗口标准吗?包含以上所有内容的东西是可以接受的.(即使它只访问常见的东西,它将是一个起点).

网络:
有几个(包括Boost低级别的东西).
但有没有人在基于服务的网络层工作?

Java/C#在其标准库中具有的所有其他内容.
这些东西让初学者更容易跳入并说哇做了,它可以在任何地方(几乎)工作.

无论如何.希望有一些很酷的项目.

编辑

也许没有一个.但是,如果有一对可以捆绑在一起作为一个起点(并且可能随着时间的推移而修改(在那里被弃用的关键字))成为一个很好的整合.

注意:Windows只是我要找的一小部分.Java/C#语言比GUI更加强大.什么是一组很好的库,可以在一个地方获得所有功能.

c++

18
推荐指数
5
解决办法
1196
查看次数

如果我使用显式构造函数,是否需要将关键字放在.h和.cpp文件中?

实际上我的问题都在标题中.
无论如何:
我有一个类,我使用显式构造函数:
.h

class MyClass
{
  public:
    explicit MyClass(const string& s): query(s) {}
  private:
   string query;
}
Run Code Online (Sandbox Code Playgroud)

是否必须在实现(.cpp)文件中放置显式关键字?

c++ explicit-constructor

16
推荐指数
1
解决办法
5356
查看次数

OpenID的.你如何退出

在网站上,我使用OpenID(基于StackOverflow)实现了登录.

但我似乎无法退出.
在我的主机上我可以注销但是当用户再次尝试登录时(特别是使用谷歌),身份验证会通过而无需用户输入名称和密码.

如何向OpenID提供商表明用户不再登录该站点?

php openid web-services logout

15
推荐指数
2
解决办法
5833
查看次数

Rails基于EC2 AMI

我试图导航我的新EC2设置,并希望找到Rails的AMI设置.我一直遇到麻烦.基本上,我正在寻找这样的东西:

* Apache 2.2
* Ruby Enterprise Edtion (REE)
* Passenger
* MySql Installed and configured with Ruby
Run Code Online (Sandbox Code Playgroud)

任何人都有一个AMI,他们可以指向我的基本轨道堆栈?

移动答案在这里:

感谢您的回复/想法.我见过大多数这些选择.我想我会选择一个干净的Linux AMI,然后使用这样的东西自己定制它:

http://www.rubyinside.com/how-to-install-a-ruby-18-stack-on-ubuntu-810-from-scratch-1566.html

此外,是的,我计划在单个EC2实例上运行Rails作为VPS的替代方案.如果我使用预留的实例,我基本上可以获得一台专用机器和1.7GB的RAM,每月约22美元.这击败了我发现的任何VPS.还有其他成本和负担,但我会继续调查是否有可能.

谢谢.

ruby-on-rails amazon-ec2 amazon-web-services

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

C++声明性解析序列化

看看Java和C#,他们设法根据基于特殊语言的anotation做一些邪恶的处理(如果这是不正确的名字,请原谅我).

在C++中,我们有两个问题:

1)无法使用在运行时可访问的类型信息来注释类.
2)解析源以生成东西是复杂的方法.

但我认为这可以通过一些模板元编程来完成,以实现与anotations相同的基本效果(仍然只是考虑它).与专门针对不同类型的char_traits一样,xml_traits模板可以以明确的方式使用.此traits类可用于通过专门化您尝试序列化的类的特征来定义类的序列化/反序列化方式.

示例:

template<typename T>
struct XML_traits
{
    typedef XML_Empty   Children;
};

template<>
struct XML_traits<Car>
{
    typedef boost::mpl::vector<Body,Wheels,Engine>   Children;
};

template<typename T>
std::ostream& Serialize(T const&)
{
    // my template foo is not that strong.
    // but somthing like this.
    boost::mpl::for_each<typename XML_Traits<T>::Children,Serialize>(data);
}
template<>
std::ostream& Serialize<XML_Empty>(T const&)
{ /* Do Nothing */ }
Run Code Online (Sandbox Code Playgroud)

我的问题是:

有没有人看到任何项目/ decumentation(不仅仅是XML)使用这样的技术(模板元编程)来模拟在Java和C#等语言中使用的注释概念,然后可以在代码生成中使用(以有效地自动化)使用声明式的任务).

在我的研究的这一点上,我正在寻找更多的阅读材料和例子.

c++ xml serialization metaprogramming declarative

14
推荐指数
1
解决办法
1080
查看次数

什么在这里与cctype?

令我惊讶的是,以下代码编译:

#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>

int main() {
   std::string s="nawaz";
   std::string S;
   std::transform(s.begin(),s.end(), std::back_inserter(S), ::toupper);
   std::cout << S ;
}
Run Code Online (Sandbox Code Playgroud)

我原以为它会失败,因为::toupper我认为它应该在std命名空间中.快速检查cctype显示它是,但它是从根namesescece导入(神秘解决那里).

namespace std
{
  // Other similar `using` deleted for brevity.
  using ::toupper;
}
Run Code Online (Sandbox Code Playgroud)

所以第一个问题解决了但是如果我也改变了transform()上面的那一行:

std::transform(s.begin(),s.end(), std::back_inserter(S), std::toupper);
Run Code Online (Sandbox Code Playgroud)

我现在希望现在也可以编译.但是我收到编译错误:

kk.cpp:12:错误:没有匹配函数来调用`transform(__ gnu_cxx :: __ normal_iterator <char*,std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>>, __gnu_cxx :: __ normal_iterator <char*,std :: basic_string <char,std :: cha r_traits <char>,std :: …

c++ namespaces std

14
推荐指数
1
解决办法
2500
查看次数

委托构造函数抛出时是否自动回收内存?

接下来: 当委托构造函数抛出时,析构函数是否被调用?

class X
{
public:
    X()       {};
    X(int)    : X() { throw std::exception(); }
    X(double)       { throw std::exception(); }
    ~X();
};
Run Code Online (Sandbox Code Playgroud)

动态记忆怎么样?通常,构造函数中的异常意味着对象未完全构造,因此内存是干净的并且不会丢失.

但是上一个问题中的论点是在委托完成后对象完全构造(或完全初始化).这对回收内存有何影响?我希望记忆仍然是清洁的!

int main()
{
    new X(5);        // new called 
                     // delete called because delegate completed.
                     // I assume:  
                     //      Memory re-claimed (because constructor did not complete)
                     //      I assume the C++11 standard adjusted to compensate.
                     //      As a constructor did complete.
}
Run Code Online (Sandbox Code Playgroud)

比较也是:

int main()
{
    new X(5.0);      // new called 
                     //    Delete **NOT** called …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

14
推荐指数
1
解决办法
531
查看次数

我认为数组是不可复制的

我的印象是阵列是不可复制的(或可分配的).

int x[5] = {1,2,3,4,5};
int y[5] = {6,7,8,9,0};

x = y; // Fails to compile
Run Code Online (Sandbox Code Playgroud)

但是当我在一个类中放入一个数组时,复制构造函数和赋值运算符工作(我会按预期说,但它不是我所期望的).

#include <iostream>

struct X
{
    virtual ~X(){} // Just in case it was something to do with POD 
                   // make sure its not a POD
    int x[5];
};

int main()
{
    X   a;

    a.x[0]  = 0;
    a.x[1]  = 1;
    a.x[2]  = 2;
    a.x[3]  = 3;
    a.x[4]  = 4;

    // Make a copy of a and test it
    X   b(a);          
    std::cout << a.x[0] << …
Run Code Online (Sandbox Code Playgroud)

c++ arrays copy-constructor assignment-operator

13
推荐指数
1
解决办法
690
查看次数