根据我的老师的说法,编写这样的用户定义函数是不好的做法:
int DoubleNumber(int Number)
{
return Number * 2;
}
int main()
{
cout << DoubleNumber(8);
}
Run Code Online (Sandbox Code Playgroud)
相反,他说总是使用前向声明,即使这些函数不需要彼此了解:
int DoubleNumber(int Number); // Forward declaration.
int main()
{
cout << DoubleNumber(8);
}
int DoubleNumber(int Number) // Implementation.
{
return Number * 2;
}
Run Code Online (Sandbox Code Playgroud)
我发现这个特别奇怪,因为他告诉我们前向声明和实现完全相同或者你会得到错误是多么重要.如果这是一个大问题,为什么不把它全部放在上面main()呢?
那么,同时申报和实施真的是不好的做法吗?它甚至重要吗?
我的库使用了几个嵌套的命名空间,如下所示:
Library name
Class name 1
Class name 2
Class name 3
[...]
Utilities
Class name 1
[...]
Class name 2
[...]
Class name 3
[...]
[...]
Run Code Online (Sandbox Code Playgroud)
"Utilities"命名空间包含对每个类的有用扩展,这些扩展不保证包含在实际类本身中.
"库名"的命名空间是必要的,因为它避免了与其他库的广泛的冲突,在"工具"命名空间是必要的,以避免歧义,从出现的类型,像这样的事情,而且里面的"类名"的命名空间避免之间的名称冲突为类似的类编写的实用程序
尽管如此,它在实践中仍然是一个巨大的麻烦.举例来说,例如:
MyLibrary::MyContainer<int> Numbers = MyLibrary::Utilities::MyContainer::Insert(OtherContainer, 123, 456);
// Oh God, my eyes...
Run Code Online (Sandbox Code Playgroud)
这让我觉得我做错了.有没有更简单的方法来保持组织,直观和明确的事情?
CLOCKS_PER_SEC的数据类型通常表示为什么? long unsigned int? clock_t?它是否因实施而异?
我问,因为我CLOCKS_PER_SEC在返回值中使用,我想确保使用最合适的类型.
如果使用位运算符(会发生什么事&,|等)来比较两个大小不同的位域?
例如,0 1 1 0与0 0 1 0 0 0 0 1:
0 1 1 0 0 0 0 0 The smaller one is extended with zeros and pushed to the
0 0 1 0 0 0 0 1 most-significant side.
Run Code Online (Sandbox Code Playgroud)
要么...
0 0 0 0 0 1 1 0 The smaller one is extended with zeros and pushed to the
0 0 1 0 0 0 0 1 least-significant side.
Run Code Online (Sandbox Code Playgroud)
要么... …
我对HTML的最大抱怨是换行符在元素之间增加了一点点空间.(jsFiddle.)
这可能会破坏子元素大小完全适合父母的布局.
我在某处读到你可以删除这个隐式填充 - 同时仍然保持代码有些清晰 - 通过使用这样的注释:
<!--
--><div>Foo</div><!--
--><div>Bar</div><!--
--><div>And so on...</div><!--
-->
Run Code Online (Sandbox Code Playgroud)
这有效,但我觉得必须有一个更好的解决方案.还有什么方法可以解决断线填充问题?
import std.stdio;
class IntegerContainer
{
public int Integer = 1;
}
void DoubleInteger(IntegerContainer Container)
{
Container.Integer *= 2;
}
void main()
{
IntegerContainer Container = new IntegerContainer; // Internal integer defaults to one.
DoubleInteger(Container); // Internal integer changes to two inside the function.
writefln(Container.Integer); // Prints "2."
}
Run Code Online (Sandbox Code Playgroud)
在D中,引用与值是类型的特征,而不是函数参数.来自C++,这对我来说真的很糟糕.
看起来有一个ref关键字强制传递接受structs的函数的引用.是否有这样的等价物来传递class价值?
例如,假设我想创建一个返回自定义容器类的排序副本的函数函数.在C++中,这就像使用一样简单Foo Sorted(Foo Object),而不是Foo Sort(Foo& Object).在没有手动复制对象的情况下,我认为无法在D中执行此操作.
我见过的大多数D语言教程都用来printf将文本输出到控制台,但这可能不对.我知道D提供了对C/C++库的直接访问,但是不应该使用D的控制台输出功能吗?将文本(格式化或其他方式)输出到控制台窗口的首选方法是什么?
来自http://www.cplusplus.com/reference/iostream/cout/:
默认情况下,大多数系统都将其标准输出设置为控制台,其中显示了文本消息,但通常可以重定向.
我从来没有听说过一个系统,stdout除了控制台窗口之外,默认情况下也是如此.我可以看到如何重定向它在打印是一项昂贵的操作的系统中可能是有益的,但这在现代计算机中应该不是问题,对吧?
我正在尝试创建一个CSS表(为了布局目的)在顶部和底部有一个标题.
不幸的是,据我所知,display: table-caption将所有内容合并到顶部的单个空间中.这意味着实际只显示"标题"标题.
我已经尝试将它们视为行,但由于某种原因,它们的宽度绑定到第一个表列的宽度.(我在这里做错了吗?)如果我把它们div的宽度设置为常规s,也会发生同样的情况100%.
是否有另一种,也许更优雅的方式来拥有多个表格标题?我试图弄乱布局时是否犯了一些愚蠢的错误?
我一直在使用throw new Exception("...")我的代码,因为我找不到任何其他可用的东西.我正在寻找像C++ out_of_range和logic_error类这样的东西.
std.exception定义了一些函数来帮助处理异常,但没有实际的类型.
我们是要定义所有自己的异常,还是Exception只用于一切?
c++ ×5
d ×3
html ×2
ambiguity ×1
bit-fields ×1
c ×1
console ×1
cout ×1
css ×1
css-tables ×1
layout ×1
low-level ×1
namespaces ×1
organization ×1
stdout ×1
time ×1
types ×1