据我所知,没有办法做到这一点,但我会问,以防其他人知道如何做到这一点.如何在Delphi中将日期声明为const?
我发现的唯一解决方案是使用数字等价物,这是一种难以维护,因为它不是人类可读的.
const
Expire : TDateTime = 39895; // Is actually 3/23/2009
Run Code Online (Sandbox Code Playgroud)
我希望能做的是这样的:
const
Expire : TDateTime = TDateTime ('3/23/2009');
Run Code Online (Sandbox Code Playgroud)
要么
const
Expire : TDateTime = StrToDate('3/23/2009');
Run Code Online (Sandbox Code Playgroud)
所以让我知道这是一个功能请求,还是我错过了如何做到这一点(是的,我知道这似乎是一件奇怪的事情......)
我在初始化常量字符串的常量数组时遇到问题.
从week.h(仅显示相关部分):
class Week {
private:
static const char *const *days = { "mon", "tue", "wed", "thur",
"fri", "sat", "sun" };
};
Run Code Online (Sandbox Code Playgroud)
当我编译时,我得到错误"标量初始化器中的多余元素".我试着把它变成const char**,认为我弄乱了第二个const位置,但是我得到了同样的错误.我究竟做错了什么?
我有一个向量作为类的成员,我想通过getVector()函数返回它的引用,以便以后能够修改它.是不是更好地练习函数getVector()为const?但是我在下面的代码中收到错误"在类型的绑定引用中删除了限定符...".应该修改什么?
class VectorHolder
{
public:
VectorHolder(const std::vector<int>&);
std::vector<int>& getVector() const;
private:
std::vector<int> myVector;
};
std::vector<int> &VectorHolder::getVector() const
{
return myVector;
}
Run Code Online (Sandbox Code Playgroud) 我经常使用const对象的指针,就像这样......
const int *p;
Run Code Online (Sandbox Code Playgroud)
这只是意味着您无法更改p指向的整数p.但是我也看到了const指针的引用,这样宣称......
int* const p;
Run Code Online (Sandbox Code Playgroud)
据我所知,这意味着指针变量本身是不变的 - 你可以改变它整天指向的整数,但你不能指出其他东西.
有什么可能的用途?
我正在考虑这个问题,并开始考虑const ints与#defines,并意识到我实际上并不理解为什么编译器无法解决这个问题.有人可以解释为什么以下代码
const int FOO = 10;
int main(int argc, char** argv)
{
switch(argc)
{
case FOO: { printf("foo\n"); }
default: { printf("default\n"); }
}
}
Run Code Online (Sandbox Code Playgroud)
结果是
error: case label does not reduce to an integer constant
Run Code Online (Sandbox Code Playgroud)
我阅读了ISO-C99规范,该规范在6.8.4.2.3中说明
每个case标签的表达式应为整数常量表达式,并且同一switch语句中的两个case常量表达式在转换后不应具有相同的值.
我理解为什么case表达式必须是常量,但不是为什么只有一个文字让编译器(gcc 4.2.1)满意.
#include <stdio.h>
int main()
{
const int a = 12;
int *p;
p = &a;
*p = 70;
}
Run Code Online (Sandbox Code Playgroud)
它会起作用吗?
由于One Definition Rule,C或C++中不允许对全局变量进行多重定义.但是,在C++中,const全局变量可以在多个编译单元中定义而没有错误.这和C中的不一样.
为什么C++允许这样做而C不允许?与C相比,为什么const全局的使用和行为在C++中以这种方式与非const全局不同?关于const,C++和C的内容正在发生什么?
例如,这在C++中是允许的,但在C中是错误的:
// Foo.cpp
const int Foo = 99;
// Main.cpp
const int Foo = 99;
int main()
{
cout << Foo << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这对C来说很好,但C++有问题:
// Foo.cpp
const int Foo = 99;
// Main.cpp
extern const int Foo;
int main()
{
cout << Foo << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想知道volatile关键字与register,const和static关键字的不同用途.我不确定有什么影响,所以我想:
register volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
建议编译器将T存储在寄存器中,并且可以从外部某处修改T的值(OS,硬件,另一个线程)
const volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
程序本身不能修改T,但T可以在代码之外的某处修改.
static volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
如果T是类的数据成员,则意味着类的所有对象具有相同的T值,并且可以从外部的某处修改T.如果T是文件中的全局变量,则其他文件(属于项目的一部分)中的源代码无法访问T,但可以从外部的某个位置访问T. 如果T是函数中的局部变量,一旦它被初始化,它将保留在内存中直到程序结束,并且可以从外部的某个地方进行修改.
我的想法是否正确,任何有经验的C++开发人员都可以提供一个示例,其中上述内容可能在实际应用程序中使用,或者它是非常罕见的?
我不知道为什么,但如果我在声明中声明它们,我似乎无法调用let或const变量if/else.
if (withBorder) {
const classes = `${styles.circularBorder} ${styles.dimensions} ${styles.circularPadding} row flex-items-xs-middle flex-items-xs-center`;
} else {
const classes = `${styles.dimensions} ${styles.circularPadding} row flex-items-xs-middle flex-items-xs-center`;
}
return (
<div className={classes}>
{renderedResult}
</div>
);
Run Code Online (Sandbox Code Playgroud)
如果我使用这个代码就说明了classes is not defined.
但是,如果我改变const对var类的定义,但我得到一个关于警告classes used outside of binding context和all var declarations must be at the top of the function scope
我怎么能解决这个问题?
enum foo : const unsigned int
{
F,
S,
T
};
void func()
{
foo p;
p = F;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码编译后,基础类型不是const类型吗?