考虑以下函数原型:
void Remove(SomeContainer& Vec, const std::size_t Index);
SomeContainer Remove(SomeContainer Vec, const std::size_t Index);
Run Code Online (Sandbox Code Playgroud)
第二个是第一个实现的.也就是说,它们在各个方面在功能上是相同的,除了一个是通过引用传递而另一个是按值传递.
但是,GCC说这些在这种情况下是模糊的,即使第一种形式是唯一一种不返回值的形式:
Remove(SomeContainer, 123);
Run Code Online (Sandbox Code Playgroud)
有没有解决方法,或者我必须为每个表单提出不同的名称?
我正在使用以下短程序来测试std::clock():
#include <ctime>
#include <iostream>
int main()
{
std::clock_t Begin = std::clock();
int Dummy;
std::cin >> Dummy;
std::clock_t End = std::clock();
std::cout << "CLOCKS_PER_SEC: " << CLOCKS_PER_SEC << "\n";
std::cout << "Begin: " << Begin << "\n";
std::cout << "End: " << End << "\n";
std::cout << "Difference: " << (End - Begin) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,在等待几秒钟输入"虚拟"值后,我得到以下输出:
CLOCKS_PER_SEC: 1000000
Begin: 13504
End: 13604
Difference: 100
Run Code Online (Sandbox Code Playgroud)
这显然没有多大意义.无论我等多久,差异总是在100左右.
我错过了什么?我忘了包含一些标题吗?
我正在使用Xcode和GCC 4.2.
假设我必须迭代一个可能非常大的数字向量,并将偶数和奇数元素复制到新的单独向量中.(源向量可以有任何比例的均衡;它可以是所有均匀,所有可能性,或介于两者之间.)
为简单起见,push_back通常用于此类事情:
for (std::size_t Index; Index < Source.size(); Index++)
{
if (Source[Index] % 2) Odds.push_back(Source[Index]);
else Evens.push_back(Source[Index]);
}
Run Code Online (Sandbox Code Playgroud)
但是,我担心如果它被用作类似排序算法的实现的一部分,这将是低效的并且是有害的,其中性能是最重要的.例如,QuickSort涉及像这样分离元素.
您可以使用reserve()先前分配内存,因此只需要一次分配,但是您必须迭代整个源向量两次 - 一次计算需要整理的元素数量,再次进行实际复制.
当然,你可以分配与源向量大小相同的空间量,因为新的向量都不需要保留更多,但这似乎有些浪费.
有没有更好的方法让我失踪?是push_back()平时信任来管理这样的事情对于程序员,或者它可以为敏感的算法成为负担?
要求用户提供电子邮件地址有什么好处,我们只发送一封电子邮件来完成注册过程?它肯定无法抵御(D)DoS攻击,我也看不出它如何提高安全性.
我有两个文件:Main.d和ImportMe.d.他们的目的应该是不言自明的.它们位于同一目录中,没有明确的模块声明.Main.d但是,当我尝试编译时,我收到"找不到符号"错误!
$ dmd Main.d -I.
Undefined symbols:
"_D8ImportMe12__ModuleInfoZ", referenced from:
_D4Main12__ModuleInfoZ in Main.o
"_D8ImportMe8SayHelloFxAyaZv", referenced from:
__Dmain in Main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
--- errorlevel 1
Run Code Online (Sandbox Code Playgroud)
同时编译这两个文件工作正常.
$ dmd Main.d ImportMe.d
Run Code Online (Sandbox Code Playgroud)
但是,您不必使用标准库执行此操作.它有什么不同的做法?更改包含路径via -I没有可见效果.
我正在尝试在单个Frame通道上侦听事件WindowStateListener.
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.WindowStateListener;
import java.awt.event.WindowEvent;
public class UserInterface implements WindowStateListener
{
public static void main(final String[] arguments)
{
UserInterface userInterface = new UserInterface();
}
public UserInterface()
{
Frame frame = new Frame("Graphics Example");
frame.addWindowStateListener(this);
frame.add(new Label("Hello, world!");
frame.pack();
frame.setVisible(true);
}
public void windowStateChanged(WindowEvent event)
{
System.out.println(event.paramString();
}
}
Run Code Online (Sandbox Code Playgroud)
它适用于最小化事件,但不适用于近似事件. WINDOW_CLOSING绝对是一个有效的WindowEvent价值,它肯定是Frame可以抛出的东西.那么为什么不传递给它windowStateChanged()呢?
设想:
任务代码(错误检查省略):
// open, write and close
fd = open(name);
write(fd, buf, len);
close(fd);
< more code here **not** issuing read/writes to name but maybe open()ing it >
// open again and fsync
fd = open(name);
fsync(fd);
Run Code Online (Sandbox Code Playgroud)
name系统中不再有任务同时访问。
它是否已定义,更重要的是,它是否会同步 所引用的 inode 上可能的未完成写入name?即,我会buf在 fsync 之后从文件中读回吗?
来自 POSIX http://pubs.opengroup.org/onlinepubs/009695399/functions/fsync.html我想说这似乎合法......
谢谢。
5 月 18 日编辑:感谢您的回答和研究。我(2016 年)向 extfs 首席开发人员之一(Ted)提出了这个问题,并得到了这样的答案:“Posix 不保证它,但实际上它应该适用于大多数文件系统,包括 ext4。Posix 中的关键词规格为:
该
fsync()函数应请求将由命名的打开文件描述符的fildes所有数据传输到与 所描述的文件关联的存储设备fildes。
它没有说“...描述的文件的所有数据fildes”,而是说“打开的文件描述符的所有数据”。因此从技术上讲,不能保证由另一个文件描述符写入的数据会同步到磁盘。
实际上,文件系统不会尝试通过 fd 进入的脏数据,因此您无需担心。编写的内容超过严格要求的操作系统是符合标准的,因此您通常会发现这一点,即使它没有得到保证。”这比“完全相同的持久保证”不太具体,但相当权威,尽管可能已经过时了。
我想做的是一个适用于单个文件的“同步”命令。就像 …
将子命名空间用于纯粹的组织目的会被视为不良做法吗?例如:
namespace vehicles
{
namespace cars
{
// Stuff here
}
namespace boats
{
// More stuff here
}
}
Run Code Online (Sandbox Code Playgroud)
我可以看到这对大型项目来说会是一个什么问题,因为输入vehicles::cars::function很多东西会很不方便.那么小项目呢?
我刚刚开始我的容器类,我已经遇到了问题:
class Container
{
private:
string* BasePointer; // The starting pointer.
unsigned int Capacity; // The number of values the container can hold.
public:
Container() // Default constructor.
{
Capacity = 1;
BasePointer = new string[Capacity];
}
~Container() // Destructor.
{
delete BasePointer; // Delete the container to prevent memory leaking.
}
};
Run Code Online (Sandbox Code Playgroud)
我收到了错误Container Classes(26467) malloc: *** error for object 0x100100088: pointer being freed was not allocated.我做错了什么?
我正在boost::any为教育目的制作一个类似于简单的类,但我无法弄清楚如何访问存储的值.我可以完美地设置值,但是当我尝试访问"holder"类中的任何成员时,编译器只会抱怨在派生自的类中找不到该成员.我不能virtual因为模板而声明成员.
这是相关的代码:
class Element
{
struct ValueStorageBase
{
};
template <typename Datatype>
struct ValueStorage: public ValueStorageBase
{
Datatype Value;
ValueStorage(Datatype InitialValue)
{
Value = InitialValue;
}
};
ValueStorageBase* StoredValue;
public:
template <typename Datatype>
Element(Datatype InitialValue)
{
StoredValue = new ValueStorage<Datatype>(InitialValue);
}
template <typename Datatype>
Datatype Get()
{
return StoredValue->Value; // Error: "struct Element::ValueStorageBase" has no member named "Value."
}
};
Run Code Online (Sandbox Code Playgroud) c++ ×6
ambiguity ×1
awt ×1
boost-any ×1
c ×1
class ×1
clock ×1
command-line ×1
compilation ×1
d ×1
destructor ×1
dmd ×1
events ×1
filesystems ×1
gcc ×1
java ×1
linux ×1
memory-leaks ×1
module ×1
namespaces ×1
oop ×1
organization ×1
overloading ×1
performance ×1
pointers ×1
posix ×1
push-back ×1
registration ×1
swing ×1
time ×1
unix ×1
vector ×1
xcode ×1