s****A 发帖数: 80 | 1 找到的所有定义都说必须是整型或转化为整型的,编译时可以evaluate to constant的
表达式
那照这种定义的话 const double pi=3.1415926
这里的3.1415926肯定就不是constant expression了
可是同一本书上又说When a const is initialized by a value that is not a
constant expression, 那它的define就不应该在头文件里
照这个条件的话上面的pi的定义就不能放在头文件里了
可是看到另外一个来源里明明就说const double pi=3.1415926应该放在头文件里
因为它是被constant expression初始化的
那么,到底一个小数算不算 constant expression? |
p*****2 发帖数: 21240 | 2 发信人: wwzz (一辈子当码工), 信区: JobHunting
标 题: Re: 请问一下关于new和delete的概念
发信站: BBS 未名空间站 (Sun Mar 3 02:54:54 2013, 美东)
快上Java 贼船。 |
r*********n 发帖数: 4553 | 3 不太明白这个题目,把3.1415926看成string literal就行了吧。 |
s****A 发帖数: 80 | 4 可是职位指定要C++啊
【在 p*****2 的大作中提到】 : 发信人: wwzz (一辈子当码工), 信区: JobHunting : 标 题: Re: 请问一下关于new和delete的概念 : 发信站: BBS 未名空间站 (Sun Mar 3 02:54:54 2013, 美东) : 快上Java 贼船。
|
s****A 发帖数: 80 | 5 怎么会是string literal?
不是float 或者double literal吗?
但不管如何都不是integral type的啊,所以不符合书上关于constant expression的定义
【在 r*********n 的大作中提到】 : 不太明白这个题目,把3.1415926看成string literal就行了吧。
|
R****d 发帖数: 27 | 6 a global constant by default has internal linkage, and thus can be included
in header file.
constant express is integral only.
constant expression evaluates to const. const is not necessarily constant
expression.
so
const double pi=3.14 is a constant, not a constant expression.
In a test.hpp:
const double pd =3.14;// this is ok. 3.14 is const.
class X {
static const double pd =3.14;//Line A: this is error. 3.14 is not
constant expression
static const int pi = 3; // Line B: this is ok. 3 is constant expression
}
Compiler may accept Line A, as an extison.
try compile with -std=c++0x if you use g++
【在 s****A 的大作中提到】 : 找到的所有定义都说必须是整型或转化为整型的,编译时可以evaluate to constant的 : 表达式 : 那照这种定义的话 const double pi=3.1415926 : 这里的3.1415926肯定就不是constant expression了 : 可是同一本书上又说When a const is initialized by a value that is not a : constant expression, 那它的define就不应该在头文件里 : 照这个条件的话上面的pi的定义就不能放在头文件里了 : 可是看到另外一个来源里明明就说const double pi=3.1415926应该放在头文件里 : 因为它是被constant expression初始化的 : 那么,到底一个小数算不算 constant expression?
|