这个问题的目的是只为我和许多像我这样的人获取知识或信息.
所以我的问题是:
是否有必要在循环或函数之前初始化/声明变量?
问这个问题是我的困惑,因为我之前是否初始化/声明变量我的代码是否仍然有效.
我正在分享我实际意思的演示代码:
$cars = null;
foreach ($build as $brand) {
$cars .= $brand . ",";
}
echo $cars;
Run Code Online (Sandbox Code Playgroud)
要么
foreach ($build as $brand) {
$cars .= $brand . ",";
}
echo $cars;
Run Code Online (Sandbox Code Playgroud)
这两段代码对我来说都是一样的,所以在开始时初始化/声明一个变量是必要的吗?
这些陈述在哪些方面有所不同?
我是VB.Net的人.(因为我必须这样做,因为签署我的支票的人是这样说的.:P)我在Java中长大,当我有机会时,我通常不会在C#中阅读或写作.我今天遇到了一些我从未见过的语法,而且我似乎无法弄明白.
在以下方法声明中,<T>表示什么?
static void Foo <T>(params T [] x)
我已经看到与声明泛型集合和事物一起使用,但我不能为我的生活弄清楚它对这个方法的作用.
如果它很重要,我在考虑一些C#脑筋急转弯时遇到过它.第六个预告片包含整个代码段.
我的项目只包含两个源文件:
a.cpp:
const int n = 8;
Run Code Online (Sandbox Code Playgroud)
b.cpp:
extern const int n;
int main()
{
// error LNK2001: unresolved external symbol "int const n" (?n@@3HB)
int m = n;
}
Run Code Online (Sandbox Code Playgroud)
我知道有几种方法可以使它工作; 但是,我只是想知道为什么它不起作用?
这段代码很好编译:
extern int i = 10;
void test()
{
std::cout << "Hi" << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
虽然这个错误:
void test()
{
extern int i = 10;
std::cout << "Hi" << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
错误:'我'有'extern'和初始化程序
我读了C++ Primer
包含显式初始值设定项的任何声明都是定义.我们可以在定义为extern的变量上提供初始化器,但这样做会覆盖extern.具有初始化程序的extern是一个定义.在函数内部的extern上提供初始化程序是错误的.
有人可以解释为什么如果在函数本地完成这应该是一个错误,而在全局范围内允许这样做?
在Stroustrup的The C++ Programming Language:Special Edition(3rd Ed)中,Stroustrup写道,控制语句条件中的变量声明和初始化不仅是允许的,而且是鼓励的.他写道,他鼓励它,因为它将变量的范围缩小到只有它们所需的范围.所以像这样......
if ((int i = read(socket)) < 0) {
// handle error
}
else if (i > 0) {
// handle input
}
else {
return true;
}
Run Code Online (Sandbox Code Playgroud)
...是很好的编程风格和实践.该变量i仅存if在于需要它的语句块中,然后超出范围.
但是,g ++(版本4.3.3 Ubuntu特定编译)似乎不支持编程语言的这个特性,这对我来说是令人惊讶的.也许我只是用一个标志来调用g ++来关闭它(我称之为的标志是-g和-Wall).在使用这些标志进行编译时,我的g ++版本返回以下编译错误:
socket.cpp:130: error: expected primary-expression before ‘int’
socket.cpp:130: error: expected `)' before ‘int’
Run Code Online (Sandbox Code Playgroud)
在进一步的研究中,我发现我似乎并不是唯一一个不支持此编译器的编译器.并且在这个问题中似乎存在一些混淆,因为确切地说语言在语言中是什么标准,以及编译器使用它编译什么.
所以问题是,什么编译器支持这个功能以及需要设置哪些标志才能编译?这是某个标准而不是其他标准的问题吗?
另外,出于好奇,人们普遍认同Stroustrup这是好风格吗?或者这是一种语言的创造者在他脑海中获得一个想法的情况,这个想法不一定得到语言社区的支持?
例如,假设我们有一个联盟
typedef union {
unsigned long U32;
float f;
}U_U32_F;
Run Code Online (Sandbox Code Playgroud)
声明此union类型的变量时,有没有办法设置初始值?
U_U32_F u = 0xffffffff; // Does not work...is there a correct syntax for this?
Run Code Online (Sandbox Code Playgroud) 这可能是一件非常简单的事情,但我是C++的新手,所以需要帮助.
我只想在我的C++头文件中声明一个数组,如:
int lettersArr[26];
Run Code Online (Sandbox Code Playgroud)
然后在cpp文件的函数中定义它,如:
lettersArr[26] = { letA, letB, letC, letD, letE, letF, letG, letH,
letI, letJ, letK, letL, letM, letN, letO, letP, letQ, letR, letS,
letT, letU, letV, letW, letX, letY, letZ };
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我的语法有错吗?这是正确的方法是什么?
非常感谢.
我在存储过程中遇到了一个有趣的场景(至少对我而言).想有专家的意见和想法.
DECLARE @loopcounter INT
SET @loopcounter=10
WHILE @loopcounter > 0
BEGIN
DECLARE @insidevalue int
IF (@loopcounter%2 = 0)
SET @insidevalue = @loopcounter
PRINT 'Value_' + CAST(@insidevalue AS NVARCHAR) + '_'
SET @loopcounter = @loopcounter - 1
END
Run Code Online (Sandbox Code Playgroud)
我期待这个块将给出如下输出
Run Code Online (Sandbox Code Playgroud)Value_10_ Value_ _ Value_8_ Value_ _ Value_6_ Value_ _ Value_4_ Value_ _ Value_2_ Value_ _
相反,我输出如下:
Value_10_
Value_10_
Value_8_
Value_8_
Value_6_
Value_6_
Value_4_
Value_4_
Value_2_
Value_2_
我想如果我在while块中声明一个变量,那么对于每次迭代,它会将值重置为NULL或默认值(来自c#background).
如果这是设计的那么我的问题是SQLServer如何在块内处理该变量的'DECLARE'语句?是否因为变量已经在内存中而忽略它?
有人可以解释一下这种行为吗?
我对的含义感到困惑void *function()。
它是指向函数的指针还是返回的函数void*?我一直在数据结构上使用它作为返回指针的递归函数,但是当我在多线程(pthread)中看到代码时,会有一个相同的函数声明。现在我很困惑他们之间有什么区别。
declaration ×10
c++ ×5
c ×2
extern ×2
variables ×2
arrays ×1
c# ×1
conditional ×1
const ×1
definition ×1
double ×1
header ×1
java ×1
methods ×1
php ×1
pointers ×1
scope ×1
sql-server ×1
unions ×1