// MyClass.h
namespace MyNamespace {
static const double GasConstant = 1.987;
class MyClass
{
// constructors, methods, etc.
};
}
Run Code Online (Sandbox Code Playgroud)
我以前在MyClass声明中声明了GasConstant(并且在源文件中有一个单独的定义,因为C++不支持const非整数类型的初始化).然而,我需要从其他文件访问它,从逻辑上看,它似乎应该驻留在命名空间级别.
我的问题是,static const在这种情况下会产生什么影响?显然const意味着我无法为GasConstant分配新值,但命名空间中的静态成员意味着什么.这类似于文件范围内的静态,其中成员在单元外是不可访问的吗?
我听说临时对象只能分配给常量引用.
但是这段代码给出了错误
#include <iostream.h>
template<class t>
t const& check(){
return t(); //return a temporary object
}
int main(int argc, char** argv){
const int &resCheck = check<int>(); /* fine */
typedef int& ref;
const ref error = check<int>(); / *error */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
得到的错误是 invalid initialization of reference of type 'int&' from expression of type 'const int'
stl充满了这样的定义:
iterator begin ();
const_iterator begin () const;
Run Code Online (Sandbox Code Playgroud)
由于返回值不参与重载分辨率,因此这里唯一的区别就是函数的存在const.这是超载机制的一部分吗?什么是编译器解析线的算法,如:
vector<int>::const_iterator it = myvector.begin();
Run Code Online (Sandbox Code Playgroud) 在分析我的反向传播算法后,我了解到它负责占用我60%的计算时间.在我开始研究并行替代方案之前,我想看看我能做些什么.
该activate(const double input[])功能仅被占用约5%的时间.该gradient(const double input)功能实现如下:
inline double gradient(const double input) { return (1 - (input * input)); }
Run Code Online (Sandbox Code Playgroud)
有问题的培训功能:
void train(const vector<double>& data, const vector<double>& desired, const double learn_rate, const double momentum) {
this->activate(data);
this->calculate_error(desired);
// adjust weights for layers
const auto n_layers = this->config.size();
const auto adjustment = (1 - momentum) * learn_rate;
for (size_t i = 1; i < n_layers; ++i) {
const auto& inputs = i - 1 > 0 …Run Code Online (Sandbox Code Playgroud) 想象一下,我有这个C函数(以及头文件中的相应原型)
void clearstring(const char *data) {
char *dst = (char *)data;
*dst = 0;
}
Run Code Online (Sandbox Code Playgroud)
有未定义行为在上面的代码,铸造const走,或者是它只是一个非常不好的编程习惯?
假设没有使用const限定对象
char name[] = "pmg";
clearstring(name);
Run Code Online (Sandbox Code Playgroud) 它是安全的(在理论上还是在实践中),以reinterpret_cast一std::pair<T1, T2> const &成std::pair<T1 const, T2> const &,假设程序员没有故意做了一些奇怪的类似专业std::pair<T1 const, T2>?
我希望能够做到这样的事情:
class Circle {
const RADIUS_TO_CIRCUMFERENCE = M_PI * 2; // Not allowed
private $radius;
public function __construct( $radius ) {
$this->radius = $radius;
}
...
public function getCircumference() {
return $this->radius * self::RADIUS_TO_CIRCUMFERENCE;
}
}
Run Code Online (Sandbox Code Playgroud)
但我不能从这样的表达式创建一个类常量:
该值必须是常量表达式,而不是(例如)变量,属性,数学运算的结果或函数调用.
所以我的问题是:这种PHP限制的最佳解决方法是什么?我知道以下变通方法,但还有其他更好的方法吗?
class Circle {
private static $RADIUS_TO_CIRCUMFERENCE;
private $radius;
public function __construct( $radius ) {
$this->radius = $radius;
$this->RADIUS_TO_CIRCUMFERENCE = M_PI * 2;
}
...
public function getCircumference() {
return $this->radius * $this->RADIUS_TO_CIRCUMFERENCE;
}
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个,因为价值$RADIUS_TO_CIRCUMFERENCE可以改变,所以它不是真正的"常数".
我有相当于以下代码:
const int* const n = new int;
printf("input: ");
scanf("%d", n);
delete n;
Run Code Online (Sandbox Code Playgroud)
现在,因为n是指向CONSTANT整数的指针,所以这不应该工作(我期待编译器错误).但是,这似乎可以正常工作,甚至可以将输入值存储到*n中.
我想知道,为什么这不会给我一个错误; 它为什么有效?扫描不能改变*n的值吗?
我需要一种方法来初始化我目前正在处理的程序的数组的const元素.问题是我必须用函数初始化这些元素,没有办法像这样做:
const int array[255] = {1, 1278632, 188, ...};
Run Code Online (Sandbox Code Playgroud)
因为我必须生成很多数据.我尝试的是将数据memcpy到const int,但这不起作用,但没有奏效.
const int array[255];
void generateData(){
for(int i = 0; i < 255; i++) {
initializeSomehowTo(5, array[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望你明白我在想什么,对不起,如果我把这个问题翻倍,我一定忽略了它.