我注意到C++不会编译以下内容:
class No_Good {
static double const d = 1.0;
};
Run Code Online (Sandbox Code Playgroud)
但是,它会愉快地允许将double更改为int,unsigned或任何整数类型的变体:
class Happy_Times {
static unsigned const u = 1;
};
Run Code Online (Sandbox Code Playgroud)
我的解决方案是将其改为:
class Now_Good {
static double d() { return 1.0; }
};
Run Code Online (Sandbox Code Playgroud)
并认为编译器将足够智能以在必要时内联...但它让我很好奇.
为什么C++设计器允许我使用静态const一个int或unsigned,而不是一个double?
编辑:我在Windows XP上使用visual studio 7.1(.net 2003).
EDIT2:
问题已得到解答,但为了完成,我看到的错误:
error C2864: 'd' : only const static integral data members can be initialized inside a class or struct
Run Code Online (Sandbox Code Playgroud) 我知道如何初始化一个不是整数的静态成员,但我想知道,这个语法背后的基本原理是什么?我希望能够将值放在类中,就像你可以使用整数成员一样,la:
class A {
static const int i = 3;
};
Run Code Online (Sandbox Code Playgroud)
我意识到这可能意味着更多的重建,如果我改变了值,因为它是标题的变化 - 但在某些情况下这是非常不可能的 - 并且就像改变标题中的#define一样糟糕.
对于编译器来说,它似乎并不是一件非常难以理解的东西.是否有技术原因,它的工作方式如何?或者仅仅是编译器执行将实现与定义分离的良好实践的情况?
当我尝试初始化多维数组时,我收到以下错误:
(20) : error C2059: syntax error : '{'
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
/*
* Tic-Tac-Toe
* Version 1.0
* Copyright (C) 2010 lolraccoon. All rights reserved.
*/
#ifndef GAME_H
#define GAME_H
#include <iostream>
using namespace std;
class Game
{
private:
/*
* 0 = NONE
* 1 = HUMAN
* 2 = COMPUTER
*/
int board[3][3] = {0};
char pieces[3] = {' ','X','O'};
public:
void dispBoard();
};
#endif
Run Code Online (Sandbox Code Playgroud)